2016-09-21 225 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