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