在tensorflow中tf.sub和just-minus运算有什么区别?

2024-05-10 15:51:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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以增加平方差。

我的问题很简单。如果我只用减号而不是 如下面所示,有什么不同?会不会造成错误的结果?

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

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

内置的反向传播计算只能通过“tf.*”来完成?


Tags: 代码nametftensorflowsteptrainvariableplaceholder
2条回答

是,-和+分解为tf.sub ad tf.add。如果您查看tensorflow代码,您将看到tf.Variable上的这些运算符被tf.*方法重载。

至于为什么两者都存在,我假设tf.*是为了一致性而存在的。所以sub和say matmul操作可以以相同的方式使用。而运算符重载是为了方便。

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

相关问题 更多 >