我对以下代码感到困惑:y = x
和y = tf.identity(x)
。更确切地说,当我运行以下代码片段时,我会感到困惑:
代码1:
import tensorflow as tf
x = tf.Variable(0.0, name="x")
with tf.control_dependencies([x_plus_1]):
y = x
init = tf.initialize_all_variables()
with tf.Session() as sess:
init.run()
for i in range(5):
print(y.eval())
这将给出输出:0.0 0.0 0.0 0.0 0.0
代码2:
import tensorflow as tf
x = tf.Variable(0.0, name="x")
with tf.control_dependencies([x_plus_1]):
y = tf.identity(x, name='id')
init = tf.initialize_all_variables()
with tf.Session() as sess:
init.run()
for i in range(5):
print(y.eval())
唯一的变化是从y=x
到y=tf.identity(x)
,但现在结果是1.0 2.0 3.0 4.0 5.0
非常感谢你。
x
是Tensor,我们称之为tensor_1
。当你说y = x
你说变量y
具有Tensor tensor_1
的值。当你做y = tf.identity(x)
时,你正在创建一个新的Tensor,tensor_2
,其值与tensor_1
相同。但它是图表中的一个不同节点,因此从tensor_1
到tensor_2
的值必须移动。这就是为什么with tf.control_dependencies([x_plus_1])
在你的第二个代码中做了一些事情,但在第一个代码中却没有。因为在第一个代码中你没有创建任何control_depdendencies
可以使用的新Tensor。
总结y = x
使变量y
指向x
中的同一个对象,但是y = tf.identity(x)
创建了一个新的对象,其内容为x
。