2016-09-21 327 views

回答

25

TL; DR:這是不必要的,但這是一個很好的做法。

由於默認圖形總是被註冊,所以每個操作和變量都被放入默認圖形中。 但是,該語句會創建一個新圖並將所有內容(在其範圍內聲明)放入此圖中。 如果圖是唯一的圖,那沒用。但是這是一個很好的做法,因爲如果你開始使用許多圖表,就更容易理解ops和vars的放置位置。 由於這個聲明沒有花費任何代價,所以最好寫下它。只要確保將來重構代碼,定義的操作就屬於您最初選擇的圖形。

5

當你不得不爲你創建的每一個操作顯式地指定圖時,這是一個人工產物。

我還沒有看到任何令人信服的情況下需要一個以上的圖形,因此你通常可以逃脫保持曲線隱含的使用tf.reset_default_graph()當你想擦乾淨石板

的一些陷阱:

  • 默認的圖形堆棧線程本地,在多線程,以便創建OPS將創建多個圖形
  • 會話保存它的圖形(sess.graph)的手柄,所以如果你創建會話調用tf.reset_default_graph()之前,您的會話圖形會有所不同FR OM默認的圖形,這意味着你創建新的OPS不會在雪村

可運行當你點擊這些陷阱之一,你可以設置一個特定的(即,從另一個線程tf.get_default_graph()sess.graph)默認圖如下:

self.graph_context = graph.as_default() # save it to some variable that won't get gc'ed 
self.graph_context.enforce_nesting = False 
self.graph_context.__enter__() 
+0

當您需要恢復兩個單獨的Tensorflow模型時,您是否需要兩張圖? – user1700890