tensorflow学习笔记(1):sess.run()
原址:https://www.2cto.com/kf/201610/559887.html
session.run()
session.run([fetch1, fetch2])
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這兩個(gè)值的時(shí)候,是并行運(yùn)算的,第一次:程序先fetch “state”的值,然后fetch “update”(導(dǎo)致了assign op)。 第二次,程序先fetch “update”(導(dǎo)致了 assign op),然后fetch “state” . 所以導(dǎo)致了第一次輸出是0.0, 第二次輸出是2.0.
注:(update op 更新state的值, 而我在fetch update 的同時(shí)也fetch 了state, 只有在這種情況下才會出現(xiàn)上述的問題。 如果我不fetch state ,而去fetch add1的話, 就不會出現(xiàn)上述問題,可見底層是先更新了state的值,才去計(jì)算add1。這樣的話我們經(jīng)常使用的代碼sess.run([train_op, loss]),獲取的loss就是train_op執(zhí)行完之后的loss了)
執(zhí)行sess.run()時(shí),tensorflow是否計(jì)算了整個(gè)圖
我們在編寫代碼的時(shí)候,總是要先定義好整個(gè)圖,然后才調(diào)用sess.run()。那么調(diào)用sess.run()的時(shí)候,程序是否執(zhí)行了整個(gè)圖
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,便沒有執(zhí)行 init = tf.initialize_all_variables() with tf.Session() as sess:sess.run(init)for _ in range(3):print sess.run(update)和上個(gè)程序差不多,但我們這次僅僅是fetch “update”,輸出是1.0 , 2.0, 3.0,可以看出,tensorflow并沒有計(jì)算整個(gè)圖,只是計(jì)算了與想要fetch 的值相關(guān)的部分
sess.run() 中的feed_dict
我們都知道feed_dict的作用是給使用placeholder創(chuàng)建出來的tensor賦值。其實(shí),他的作用更加廣泛:feed 使用一個(gè) 值(不能是tensor,可以是tensor.eval())臨時(shí)替換一個(gè) op 的輸出結(jié)果. 你可以提供 feed 數(shù)據(jù)作為 run() 調(diào)用的參數(shù). feed 只在調(diào)用它的方法內(nèi)有效, 方法結(jié)束, feed 就會消失.
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)的輸出結(jié)果,所以打印出來3print sess.run(y) #由于feed只在調(diào)用他的方法范圍內(nèi)有效,所以這個(gè)打印的結(jié)果是 1?
總結(jié)
以上是生活随笔為你收集整理的tensorflow学习笔记(1):sess.run()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载] java提取字符串中的字母数字
- 下一篇: k8s安装sqlite3_kuberne