关于Tensor Flow中的函数Assign_add()的困惑

时间:2019-05-02 03:33:14

标签: python tensorflow

能否请您说明如何在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)吗?预先谢谢你。

1 个答案:

答案 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后端的神经网络并获得预期的结果。