優化器通常運行相同的計算圖表,直到收斂爲止。 tensorflow是否在開始時設置圖形並在每一步中重新使用它?如果在培訓期間更改批量,該怎麼辦?如果我像改變損失函數那樣對圖形進行一些負面改變會怎樣?如果我對圖表做了一些重大更改會怎麼樣?張量流預先生成所有可能的圖嗎?當圖形變化時,tensorflow是否知道如何優化整個計算?在什麼階段建立了張量流圖?
回答
TensorFlow只顯示一個對用戶可見的圖形,即用戶指定的圖形。用戶可以使用Session.run()
或在某張張上調用Tensor.eval()
來運行圖形。一個Session.run()
調用可以指定一些張量被饋送和其他被提取。根據需要提取的內容,TensorFlow運行時可以在內部構建並優化各種數據結構,包括用戶可見圖的修剪版本。但是,這個內部圖對於用戶來說是不可見的。不,TensorFlow不會「預先生成」所有可能的圖形。是的,TensorFlow確實對計算圖進行了廣泛的優化。最後,改變饋送張量的批量大小並不會改變圖的結構。
從keveman says,從客戶的角度來看,有一個單一的TensorFlow圖。在運行系統中,可以有多個子圖,其中只包含計算值t1
,t2
等所需的節點,這些節點在調用sess.run([t1, t2, ...])
時可以獲取。
如果你打電話sess.run([t1, t2])
將消減整體圖(sess.graph
)降至來計算這些值所需的子:即產生t1
和t2
及其所有祖先的操作。如果您隨後調用sess.run([t3, t4])
,則運行時會將圖形剪除到計算t3
和t4
所需的子圖。每當您傳遞一個新的值組合時,TensorFlow將計算一個新的修剪圖並緩存它,這就是爲什麼第一個sess.run()
可能比後面的要慢一些。
如果修剪後的圖形重疊,TensorFlow將重新使用共享操作的「內核」。這是相關的,因爲某些操作(例如tf.Variable
和tf.FIFOQueue
)是有狀態,並且它們的內容可以在兩個剪枝圖中使用。例如,您可以使用一個子圖初始化變量(例如sess.run(tf.initialize_all_variables())
),使用另一個子圖(例如sess.run(train_op)
)對它們進行訓練,然後使用第三個評估您的模型(例如sess.run(loss, feed_dict={x: ...})
)。它還允許您用一個子圖將元素排入隊列,並使其與另一個子隊列出隊,這是input pipelines的基礎。
重要的是要注意修剪不包括修剪'tf.cond'節點的不活動分支。 「fn1」和「fn2」的輸入仍保留在圖中並進行計算。只有'fn1'和'fn2'函數中定義的節點纔有條件地計算。 –
- 1. 爲什麼我們建立張量流變量字典
- 2. PIL圖像張量張量,張量流
- 3. tf.train.get_global_step()在張量流中做什麼?
- 4. compute_gradients在張量流中返回什麼
- 5. 張量流會話究竟做了什麼?
- 6. 「Fabric.framework/run」構建階段實際上做了什麼?
- 7. 張量流建立在視覺工作室
- 8. 使用python API執行張量流圖時實際發生了什麼?
- 9. 張量流立體圖像批量學習
- 10. 瞭解CPU流水線階段與指令吞吐量
- 11. 爲什麼在無張量流的批量維中使用None?
- 12. 比較張量(張量流)
- 13. 經典RISC流水線 - 「內存訪問」階段實際上做了什麼?
- 14. 用張量流建立MLP用於二進制分類
- 15. 瞭解張量流分析結果
- 16. 以張量流亭亭玉立的ResNet-50中的圖像
- 17. 如何在張量流中實現RGB圖像張量?
- 18. 如何在張量流中採樣圖像張量
- 19. 如何在張量流中製作張量柱的直方圖
- 20. 張量流和光流之間有什麼區別?
- 21. 在張量流圖之間切換
- 22. 在Python中分解三階張量
- 23. 總結張量流量張量列表
- 24. 張量流中的局部變量是什麼?
- 25. 爲什麼「tf.Variable([。3],tf.float32)」在張量流中工作?
- 26. 爲什麼在張量流中評估測試數據?
- 27. 計算張量流中二階導數時的誤差
- 28. 在張量流圖中創建計數器
- 29. 在構建階段「運行腳本」需要什麼權限?
- 30. 當buildbot在構建階段失敗時,我能做些什麼
@mrry謝謝。如果Session.run()在不同的張量/操作符上被調用兩次,我仍然不太瞭解會發生什麼情況,這可能需要不同的計算圖。 (在典型的優化問題中,會反覆調用Session.run()來執行相同的操作,但操作原則上可能會更改。) – user3320467
我添加了一個解答您的後續問題的答案。讓我知道,如果它弄清楚了事情! – mrry
@mrry明白了。現在清除。非常感謝! – user3320467