张量流中“y = x”和y = tf.identity(x)之间的区别是什么

时间:2018-04-17 14:10:15

标签: python tensorflow

我对以下代码感到困惑:y = xy = 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=xy=tf.identity(x),但现在结果为1.0 2.0 3.0 4.0 5.0

非常感谢你。

1 个答案:

答案 0 :(得分:1)

x是Tensor,我们称之为tensor_1。当您说y = x时,您说变量y的值为张量tensor_1。当您执行y = tf.identity(x)时,您正在创建新的Tensor tensor_2,其值与tensor_1相同。但它是图表中的不同节点,因此从tensor_1tensor_2的值必须移动。这就是为什么with tf.control_dependencies([x_plus_1])在你的第二个代码中做了什么,但在第一个代码中没有做任何事情。因为在第一个代码中,您没有创建control_depdendencies可以使用的任何新Tensor。

总结y = x使变量y指向x中的同一对象,但y = tf.identity(x)创建一个内容为x的新对象}。