2016-03-20 4 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.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 

また、テンソルボードの理解に役立つ場合があります。 Pythonはエラーを引き起こした行番号も表示しているので、大部分の人にとっては余計かもしれません。