Python TensorFlow:多次初始化变量
下面的代码段是如何运行的,我有点困惑Python TensorFlow:多次初始化变量,python,tensorflow,Python,Tensorflow,下面的代码段是如何运行的,我有点困惑 import tensorflow as tf x = tf.Variable(0) init_op = tf.initialize_all_variables() modify_op = x.assign(5) with tf.Session() as sess: sess.run(init_op) print(sess.run(x)) x += 3 print(sess.run(x)) sess.run(ini
import tensorflow as tf
x = tf.Variable(0)
init_op = tf.initialize_all_variables()
modify_op = x.assign(5)
with tf.Session() as sess:
sess.run(init_op)
print(sess.run(x))
x += 3
print(sess.run(x))
sess.run(init_op) # Trying to initialize x once again to 0
print(sess.run(x)) # Gives out 3, which leaves me confused.
print(sess.run(modify_op))
print(sess.run(x)) # Gives out 8, even more confusing
这是输出:0
3
3
5
8
是否线
x+=3
不是默认图形的一部分?还是发生了什么事?我们将非常感谢您的帮助,谢谢 您的x
变量正在由更改
x += 3
但不是以你可能期望的方式。tensorflow库代码凌驾于+
之上,因此您可以有效地将内容x
交换为新的TF张量(旧的仍将在图中,只是x现在指向一个新的)。这样写出来:
x = tf.Variable(0) + 3
而且更清楚的是发生了什么。另外,插入一些打印语句
x = tf.Variable(0)
print(x)
# <tensorflow.python.ops.variables.Variable object at 0x1018f5d68>
x += 3
print(x)
# Tensor("add:0", shape=(), dtype=int32)
这将产生:
0
3
0
正如您所期待的。从外观上看,这是因为您将x=x+3线添加到了图形中。更清楚地说:现在,您定义的旧x的名称为variable_0或类似的名称,而您打印的新张量现在不再是variable_0,而是variable_1=variable_0+3。它解释了为什么你得到3(0+3)和8(5+3)。变量0仍然存在于某个地方,如果您打印sess.run(graph.get_tensor_by_name(“变量0”)),它不会改变。您将得到您期望的结果。要了解变量的名称,只需将图形视为图形定义。谢谢@jean,这对我很有帮助。谢谢,这就把它清除了。因此,我应该坚持使用
tf.add
、tf.assign
和tf.assign\u add
系列,以便将更改反映在图表中。@stark:您不必这样做,这不会把您保存在这里。如果以后要使用变量名跟踪/显示x
,应避免重新分配给x
。或者,如果没有方便的Python变量指向张量,则始终可以命名张量并直接从图中获取它。重要的是要习惯TF变量和Python变量之间的分离。我刚刚意识到这一点。我会再多玩一会儿,谢谢你的提示@斯塔克:我在答案中添加了更多的代码,显示调用初始化所有变量()
重新设置x
,就像您之前尝试测试的那样。请注意我是如何使用tf操作将赋值给x
。这就是我所做的,在您指出python变量和TF托管变量在图中是不同的之后。谢谢你的详细解释。
0
3
0