tensorflow學習筆記(十):sess.run()
阿新 • • 發佈:2019-02-18
session.run([fetch1, fetch2])
執行sess.run()時,tensorflow是否計算了整個圖
我們在編寫程式碼的時候,總是要先定義好整個圖,然後才呼叫sess.run()。那麼呼叫sess.run()的時候,程式是否執行了整個圖
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 使用一個 值臨時替換一個 op 的輸出結果. 你可以提供 feed 資料作為 run() 呼叫的引數. feed 只在呼叫它的方法內有效, 方法結束, feed 就會消失.
import tensorflow as tf
y = tf.Variable(1)
b = tf.identity(y)
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(sess.run(b,feed_dict={y:3 })) #使用3 替換掉
#tf.Variable(1)的輸出結果,所以打印出來3
#feed_dict{y.name:3} 和上面寫法等價
print(sess.run(b)) #由於feed只在呼叫他的方法範圍內有效,所以這個列印的結果是 1