您的位置:首页 > 其它

tf.identity的意义以及用例

2017-11-09 23:22 585 查看
最近在学习tensorflow,学到ExponentialMovingAverage时,里面有一个tf.identity操作,在Stack Overflow上看到一个很好的解释,记录一下。

原地址 : https://stackoverflow.com/questions/34877523/in-tensorflow-what-is-tf-identity-used-for

下面程序要做的是,5次循环,每次循环给x加1,赋值给y,然后打印出来

x = tf.Variable(0.0)
#返回一个op,表示给变量x加1的操作
x_plus_1 = tf.assign_add(x, 1)

#control_dependencies的意义是,在执行with包含的内容(在这里就是 y = x)前
#先执行control_dependencies中的内容(在这里就是 x_plus_1)
with tf.control_dependencies([x_plus_1]):
y = x
init = tf.initialize_all_variables()

with tf.Session() as session:
init.run()
for i in xrange(5):
print(y.eval())#相当于sess.run(y),由于control_dependencies的所以执行print前都会先执行x_plus_1


这个打印的是0,0,0,0,0 。也就是说没有达到我们预期的效果

如果改成这样:

x = tf.Variable(0.0)
x_plus_1 = tf.assign_add(x, 1)

with tf.control_dependencies([x_plus_1]):
y = tf.identity(x)#修改部分
init = tf.initialize_all_variables()

with tf.Session() as session:
init.run()
for i in xrange(5):
print(y.eval())
This works: it prints 1, 2, 3, 4, 5.


这时候打印的是1,2,3,4,5

解释:

tf.identity是返回了一个一模一样新的tensor,再control_dependencies的作用块下,需要增加一个新节点到gragh中。有待更新。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: