为什么我们需要TensorFlow tf.Graph?
问题描述:
是什么目的:为什么我们需要TensorFlow tf.Graph?
with tf.Graph().as_default()
我有一个使用上面的一些tensorflow代码。 但是,代码只有一个图,为什么我们需要这个?
答
TL; DR:这是不必要的,但这是一个很好的做法。
由于默认图形总是被注册,所以每个操作和变量都被放入默认图形中。 但是,该语句会创建一个新图并将所有内容(在其范围内声明)放入此图中。 如果图是唯一的图,那没用。但是这是一个很好的做法,因为如果你开始使用许多图表,就更容易理解ops和vars的放置位置。 由于这个声明没有花费任何代价,所以最好写下它。只要确保将来重构代码,定义的操作就属于您最初选择的图形。
答
当你不得不为你创建的每一个操作显式地指定图时,这是一个人工产物。
我还没有看到任何令人信服的情况下需要一个以上的图形,因此你通常可以逃脱保持曲线隐含的使用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__()
当您需要恢复两个单独的Tensorflow模型时,您是否需要两张图? – user1700890