目的是什么:
with tf.Graph().as_default()
我有一些使用上述的tensorflow代码。 但是,代码只有一个图表,为什么我们需要这个呢?
答案 0 :(得分:51)
TL; DR :这是不必要的,但这是一个很好的做法。
由于始终会注册默认图表,因此每个操作和变量都会放入默认图表中。 但是,该语句创建了一个新图形,并将所有内容(在其范围内声明)放入此图形中。 如果图表是唯一的图表,那么它就没用了。但这是一个很好的做法,因为如果你开始使用许多图表,那么更容易理解操作和变量的位置。 由于这个陈述没有任何成本,无论如何写它都会更好。只是为了确保如果将来重构代码,定义的操作属于您最初选择的图形。
答案 1 :(得分:11)
当你必须为你创建的每个操作明确指定图形时,它是一个神器。
我还没有看到任何令人信服的案例需要多个图表,因此您通常可以隐藏图表并使用tf.reset_default_graph()
来清除图表
一些问题:
sess.graph
),因此如果您在致电tf.reset_default_graph()
之前创建会话,您的会话图将与您的默认图表不同,这意味着您创建的新操作赢了& #39;可以在那个sesson中运行当您点击其中一个问题时,您可以将特定graph
(即,从另一个帖子中的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__()