2016-03-20 15 views
11

Sto cercando di usare Tensorflow. Ecco un codice molto semplice.Qual è la differenza tra tf.sub e solo meno un'operazione in tensorflow?

train = tf.placeholder(tf.float32, [1], name="train") 
W1 = tf.Variable(tf.truncated_normal([1], stddev=0.1), name="W1") 
loss = tf.pow(tf.sub(train, W1), 2) 
step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) 

Basta ignorare la parte di ottimizzazione (4a riga). Ci vorrà un numero variabile e treno W1 in modo da aumentare la differenza al quadrato.

La mia domanda è semplice. Se io uso solo segno meno, invece di tf.sub" come sotto, ciò che è diverso? Sarà causare un risultato che non va?

loss = tf.pow(train-W1, 2) 

Quando lo sostituisco, il risultato appare lo stesso. Se sono le stesse , perché abbiamo bisogno di usare le cose "tf.add/tf.sub"

cose integrata nel calcolo di propagazione può essere fatto solo dal

risposta

10

Sì,? "TF *." -? e + risolvi in ​​tf.sub ad tf.add. Se guardi il codice di tensorflow vedrai che questi operatori su tf.Variable sono sovraccarichi dei metodi tf. *

Per quanto riguarda il motivo per cui entrambi esistono, suppongo che i termini * esistano per coerenza. Quindi, sotto e dire operazione matmul può essere utilizzato allo stesso modo. Mentre il sovraccarico dell'operatore è per comodità.

1

(tf.sub sembra essere stato sostituito con tf.subtract)

L'unico vantaggio che vedo è che è possibile specificare un nome dell'operazione come in:

tf.subtract(train, W1, name='foofoo') 

Questo consente di identificare l'operazione che ha causato un errore come il nome fornito è anche mostrato:

ValueError: Dimensions must be equal, but are 28 and 40 for 'foofoo' (op: 'Sub') with input shapes 

può anche aiutare con comprensione TensorBoard. Potrebbe essere eccessivo per la maggior parte delle persone poichè python mostra anche il numero di riga che ha attivato l'errore.

Problemi correlati