tensorflow学习笔记(1):sess.run()

session.run()

session.run([fetch1, fetch2])

1
2
3
4
5
6
7
8
9
10
11
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)
init = tf.initialize_all_variables()
with tf.Session() as sess:
     sess.run(init)
     for _ in range( 10 ):
         u,s = sess.run([update,state])
         print s

在我的电脑上输出是 0.0, 2.0, 3.0, 4.0, 5.0, 5.0, 6.0, 8.0, 9.0, 10.0
是不是很奇怪为什么输出的不是0.0–9.0, 或1.0–10.0
我的猜测是:底层在fectch这两个值的时候,是并行运算的,第一次:程序先fetch “state”的值,然后fetch “update”(导致了assign op)。 第二次,程序先fetch “update”(导致了 assign op),然后fetch “state” . 所以导致了第一次输出是0.0, 第二次输出是2.0.
注:(update op 更新state的值, 而我在fetch update 的同时也fetch 了state, 只有在这种情况下才会出现上述的问题。 如果我不fetch state ,而去fetch add1的话, 就不会出现上述问题,可见底层是先更新了state的值,才去计算add1。这样的话我们经常使用的代码sess.run([train_op, loss]),获取的loss就是train_op执行完之后的loss了)

执行sess.run()时,tensorflow是否计算了整个图

我们在编写代码的时候,总是要先定义好整个图,然后才调用sess.run()。那么调用sess.run()的时候,程序是否执行了整个图

1
2
3
4
5
6
7
8
9
10
11
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)

和上个程序差不多,但我们这次仅仅是fetch “update”,输出是1.0 , 2.0, 3.0,可以看出,tensorflow并没有计算整个图,只是计算了与想要fetch 的值相关的部分

sess.run() 中的feed_dict

我们都知道feed_dict的作用是给使用placeholder创建出来的tensor赋值。其实,他的作用更加广泛:feed 使用一个 值(不能是tensor,可以是tensor.eval())临时替换一个 op 的输出结果. 你可以提供 feed 数据作为 run() 调用的参数. feed 只在调用它的方法内有效, 方法结束, feed 就会消失.

1
2
3
4
5
y = tf.Variable( 1 )
with tf.Session() as sess:
     tf.initialize_all_variables().run()
     print sess.run(y,feed_dict={y: 3 }) #使用 3 替换掉tf.Variable( 1 )的输出结果,所以打印出来 3
     print sess.run(y)  #由于feed只在调用他的方法范围内有效,所以这个打印的结果是 1
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值