我对以下代码感到困惑: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
非常感谢你。
答案 0 :(得分:1)
x
是Tensor,我们称之为tensor_1
。当您说y = x
时,您说变量y
的值为张量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
的新对象}。