tensorflow学习--sess.run()

---恢复内容开始---

当我们编写tensorflow代码时, 总是定义好整个计算图,然后才调用sess.run()去执行整个定义好的计算图, 那么有两个问题:一是当执行sess.sun()的时候, 程序是否执行了计算图上的所有节点呢?二是sees.run()中的fetch, 为了取回(Fetch)操作的输出内容, 我们在sess.run()里面传入tensor, 那这些tensor的先后顺序会影响最后的结果嘛?比如有些tensor是有先后执行关系的,如果置于后面,会重复计算嘛?
请看实验:
import tensorflow as tf

state = tf.Variable(0.0,dtype=tf.float32)
one = tf.constant(1.0,dtype=tf.float32)
new_val = tf.add(state, one)
update = tf.assign(state, new_val) #返回tensor, 值为new_val
update2 = tf.assign(state, 10000) #没有fetch,便没有执行

init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
for _ in range(3):
print(sess.run([update,state, new_val]))
print("--------")

程序输出的结果为:
[1.0, 1.0, 1.0]
--------
[2.0, 2.0, 2.0]
--------
[3.0, 3.0, 3.0]
--------

从结果可知:
首先, update2这个tensor并没有执行,因为它不在sess.run()的fetch列表中。

对于sess.sun(fetch), 只有fetch里的图元素, 才会被执行, 不在fetch中的图节点是不会执行的

其次, 当我们将sess.run()里面的fetch列表中的节点打乱时, 取出来的值依然是一次流程图计算出来的结果

当sess.run() 里面的fetch是一个list时, 无论是update在前, 还是state在前, 不会执行update之后看到state在update后面就在执行一次state, 都是在这个list中的节点在流程图中全部执行完之后在取值的。

在看实验:
import tensorflow as tf

state = tf.Variable(0.0,dtype=tf.float32)
one = tf.constant(1.0,dtype=tf.float32)
new_val = tf.add(state, one) # 1
update = tf.assign(state, new_val) #返回tensor, 值为new_val #update 1 # state 1
update2 = tf.assign(state, 10000) #没有fetch,便没有执行 # update2 10000 # state 10000

init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
for _ in range(1):
print(sess.run([state, new_val, update2, update]))
print("--------")
结果为:
[10001.0, 10001.0, 10001.0, 10001.0]
--------

分析: 程序不是从上到下依次执行的, tensorflow里面是按照计算图而流动计算的, 画出程序的计算图就可以知道, 最先开始执行的操作是update2这个节点, 然后是add这个节点。 最后tf.assign()是当流程图都走完之后进行取值的

---恢复内容结束---

转载于:https://www.cnblogs.com/IUNI/p/9415864.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值