能否请您说明如何在tf.assign_add
中用新值更新变量?例如下面的代码:
v = tf.get_variable("v", shape=(2, 1), initializer=tf.zeros_initializer())
assignment = v.assign_add(2)
由于assign_add
的文档字符串说要将参数value
(在这种情况下为2
)添加到变量中,所以我希望v
将被更新到数组[[2],[2]]。但是,它返回了
<tf.Variable 'v:0' shape=(2, 1) dtype=float32, numpy=
array([[2.0000000e+00],
[2.5789502e-09]], dtype=float32)>
如果tensorflow仅将2
添加到v
的第一个元素,为什么v
的第二个元素从0
更改为2.5789502e-09
? >
此外,为什么我们必须使用表达式assignment = v.assign_add(2)
?不应该是v = v.assign_add(2)
吗?预先谢谢你。
答案 0 :(得分:0)
我认为上述问题可能是由于我安装的tensorflow(版本1.12.0)可能已损坏。我卸载了该版本并重新安装了Tensorflow 1.13.1版。当我尝试运行代码
v = tf.get_variable("v", shape=(2, 1), initializer=tf.zeros_initializer())
assignment = v.assign_add(2)
然后我遇到了错误
InvalidArgumentError: Cannot update variable with shape [2,1] using a Tensor with shape [], shapes must be equal. [Op:AssignAddVariableOp]
仍然,这并不能完全解释为什么损坏的tensorflow包首先可以执行错误的操作(向形状[2,1]的数组添加标量)。而且,我能够训练使用tensorflow后端的神经网络并获得预期的结果。