好多人搞不清楚tf.Graph 與tf.Session ,這很簡單(原文是 It's simple :p ):
- Graph定義了計算。 它不計算任何值,它不包含任何值,它是代碼中定義的指定操作。
- Session允許執(zhí)行Graph或Graph的一部分。 它分配資源(在一臺或多臺機器上),并保存中間結果和變量的實際值。
我們來看一個例子。
定義Graph
我們定義一個帶有變量和三個操作的圖:變量總是返回我們變量的當前值。 initialize將初始值42賦給該變量。 assign將新值為13賦給該變量。
graph = tf.Graph()
with graph.as_default():
variable = tf.Variable(42, name='foo')
initialize = tf.initialize_all_variables()
assign = variable.assign(13)
注:Tensorflow會被幫我們創(chuàng)建一個默認的Graph,前兩行的代碼可以省略。
在Session中運行計算
要運行剛才定義的三個操作中的任何一個,我們需要為Graph創(chuàng)建一個Session。 Session還將分配內(nèi)存來存儲變量的當前值。
with tf.Session(graph=graph) as sess:
sess.run(initialize)
sess.run(assign)
print(sess.run(variable))
# Output: 13
變量的值僅在一個會話中有效, 如果我們嘗試在第二個會話中查詢該值,TensorFlow將引發(fā)一個錯誤,因為該變量沒有在那里初始化。
with tf.Session(graph=graph) as sess:
print(sess.run(variable))
# Error: Attempting to use uninitialized value foo
當然,我們可以在多個Session中使用圖表,我們只需要重新初始化變量。 新的Session中的值將與第一個完全獨立:
with tf.Session(graph=graph) as sess:
sess.run(initialize)
print(sess.run(variable))
# Output: 42