2016-03-20 58 views
11

我正在嘗試使用Tensorflow。這是一個非常簡單的代碼。張量流中tf.sub和正減運算有什麼區別?

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) 

只是忽略優化部分(第4行)。它將採用一個浮點數和列車W1來增加平方差。

我的問題很簡單。如果我只使用減號代替 tf.sub」下面,有什麼不同呢,還是會導致錯誤的結果?

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

當我取代它,結果看起來是一樣的。如果它們是相同的,爲什麼我們需要使用「tf.add/tf.sub」事情

內置反向傳播的計算只能由做的事情

回答

10

是,?「TF *。」 - 和+解析爲tf.sub ad tf.add。如果您查看tensorflow代碼,您將看到tf.Variable上的這些運算符已被tf。*方法重載。

至於爲什麼這兩個存在,我假設tf。*存在一致性。所以子和說matmul操作可以用相同的方式。運營商超載是爲了方便。

1

(tf.sub似乎已與tf.subtract代替)

我看到的唯一好處是,你可以在指定操作的名稱:

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

這有助於確定還會顯示導致錯誤的操作,如您提供的名稱:

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

它也可能有助於瞭解TensorBoard。對於大多數人來說這可能是矯枉過正的,因爲python也顯示了觸發錯誤的行號。

相關問題