张量流中tf.sub和just-minus操作之间的区别是什么?

时间:2016-03-20 06:22:36

标签: python tensorflow

我正在尝试使用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)

忽略优化部分(第4行)。它将采用浮动数字并训练W1以增加平方差。

我的问题很简单。如果我只使用减号代替 tf.sub"如下,有什么不同?它会导致错误的结果吗?

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

当我更换它时,结果看起来一样。如果它们是相同的,为什么我们需要使用" tf.add / tf.sub"东西?

内置反向传播计算只能通过" tf。*"事情呢?

2 个答案:

答案 0 :(得分:13)

是的, - 并且+解析为tf.sub ad tf.add。如果你看一下tensorflow代码,你会发现tf.Variable上的这些运算符都是用tf。*方法重载的。

至于为什么两者都存在,我假设存在tf。*,以保持一致性。所以sub和matmul操作可以以相同的方式使用。虽然操作员超载是为了方便。

答案 1 :(得分:2)

(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也会显示触发错误的行号。