2016-03-20 11 views
11

Próbuję użyć Tensorflow. Oto bardzo prosty kod.Jaka jest różnica między operacją tf.sub just minus w 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) 

Po prostu zignoruj ​​część optymalizacyjną (czwarta linia). Zajmie to liczbę zmiennoprzecinkową i pociąg W1, aby zwiększyć różnicę do kwadratu.

Moje pytanie jest proste. Jeśli używam tylko znak minus zamiast tf.sub”jak poniżej, co jest inaczej? Spowoduje to zły wynik?

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

Kiedy wymienić go, wynik wygląda tak samo. Jeśli są one takie same , dlaczego musimy korzystać z rzeczy „tf.add/tf.sub”

wbudowane powrotem obliczenia propagacji może być dokonana jedynie przez rzeczy

Odpowiedz

10

Tak? „TF *.?” - i + rozwiń do tf.sub ad tf.add. Jeśli spojrzysz na kod tensorflow, zobaczysz, że operatory te na tf.Variable są przeciążone za pomocą metod tf. *

Co do tego, dlaczego istnieje, zakładam, że tf. * Istnieją dla spójności. Tak więc operacja sub i say matmul może być używana w ten sam sposób. Podczas przeciążania operatora dla wygody.

1

(tf.sub wydaje się być zastąpione tf.subtract)

Jedyną zaletą jest to, że widzę można określić nazwę przedstawionego w:

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

To pomaga zidentyfikować operacja powodująca błąd, ponieważ podana nazwa jest również wyświetlana:

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

może również pomóc w zrozumieniu TensorBoard. Dla większości ludzi może to być przesada, ponieważ python pokazuje również numer wiersza, który spowodował błąd.

Powiązane problemy