1. 程式人生 > >tensorflow學習筆記(十):sess.run()

tensorflow學習筆記(十):sess.run()

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