Python程序,assign_add,结果可能有点混乱

Python程序,assign_add,结果可能有点混乱,python,tensorflow,tensor,Python,Tensorflow,Tensor,第三个数组输出结果应添加“b”和“c”,但结果未按预期打印。你能帮助我吗?非常感谢 我希望第三个数组的输出结果应该与第四个数组相同。我对第三个数组结果感到困惑。这似乎与我在assign\u add上的理解相反,此操作实际上可能会在添加之前返回变量的值,而不是之后返回 因此在本例中,c是值为[[4.723362,…]]的变量。在第一个sess.run中,您正在打印c,它具有预分配的附加值,因为更新是在之后完成的,b看起来与预期一致,d也返回预分配的附加值,因为op大概就是这样工作的。 在此之后,c

第三个数组输出结果应添加“b”和“c”,但结果未按预期打印。你能帮助我吗?非常感谢


我希望第三个数组的输出结果应该与第四个数组相同。我对第三个数组结果感到困惑。

这似乎与我在
assign\u add
上的理解相反,此操作实际上可能会在添加之前返回变量的值,而不是之后返回

因此在本例中,
c
是值为
[[4.723362,…]]
的变量。在第一个
sess.run
中,您正在打印
c
,它具有预分配的附加值,因为更新是在之后完成的,
b
看起来与预期一致,
d
也返回预分配的附加值,因为op大概就是这样工作的。
在此之后,
c
更新为现在包含值
[[5.723362,…]
。现在再次运行
d
assign\u add
op),它更新
c
,但再次返回更新前的值,即
[[5.723362,…]


总之,如果我们接受
tf.assign\u add
的返回值是添加之前的变量,并且在第一次“并行”运行调用中运行
c
d
将在执行更新之前返回
c
,这是有意义的。您可以通过在末尾添加一个
sess.run(c)
来验证这一点,它应该返回
[[6.723362,…]

据我所知,您的第四个数组是c+b-您会期望什么?第三个输出矩阵应该已经与最后一个相同。这就是OP想知道的。虽然我到目前为止还没有满意的答案,但有趣的是,
d=tf.add(c,b)
将返回正确的结果,但是
tf.assign(c,c+b)
将返回与上面相同的值。但是,根据,它似乎已经返回了更新后的值。
   b= tf.ones([3,3],dtype=tf.float32)
   c= tf.Variable(tf.random_normal([3,3],mean=1,stddev=2,dtype=tf.float32),name="c")
   d=tf.assign_add(c,b)
   init_op= tf.global_variables_initializer()
   with tf.Session() as sess:
     sess.run(init_op)
     x,y,z= sess.run([c,b,d])
     print(x,"\n!!\n",y,"\n!!\n",z,"\n!!")
     print(sess.run(d))