从图表中删除节点或重置整个默认图表

时间:2015-11-17 19:24:08

标签: python tensorflow

使用默认全局图时,是否可以在添加节点后删除节点,或者将默认图重置为空?在IPython中以交互方式使用TF时,我发现自己不得不重复重启内核。如果可能的话,我希望能够更轻松地试验图表。

5 个答案:

答案 0 :(得分:92)

2016年11月2日更新

tf.reset_default_graph()

旧东西

reset_default_graph,但不是公共API的一部分(我认为应该是,有人想在GitHub上file an issue吗?)

重置事物的工作是:

from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.InteractiveSession()

答案 1 :(得分:34)

默认情况下,会话围绕默认图构建。 为避免在会话中留下死节点,您需要控制默认图形或使用显式图形。

  • 要清除默认图表,您可以使用tf.reset_default_graph功能。

    tf.reset_default_graph()
    sess = tf.InteractiveSession()
    
  • 您还可以明确构建图形并避免使用默认图形。如果使用普通Session,则需要在构建会话之前完全创建图形。对于InteractiveSession,您只需声明图表并将其用作上下文以声明进一步的更改:

    g = tf.Graph()
    sess = tf.InteractiveSession(graph=g)
    with g.asdefault():
        # Put variable declaration and other tf operation
        # in the graph context
        ....
        b = tf.matmul(A, x)
        ....
    
     sess.run([b], ...)
    

编辑:对于tensorflow(1.0+)的最新版本,正确的函数是g.as_default

答案 2 :(得分:4)

IPython / Jupyter笔记本单元在单元格的运行之间保持状态。

创建自定义图表:

def main():
    # Define your model
    data = tf.placeholder(...)
    model = ...

with tf.Graph().as_default():
    main()

一旦运行,图表就会被清理干净。

答案 3 :(得分:2)

与Tensorflow 2.0兼容的答案:在 Tensorflow Version >= 2.0 中,当以图形方式运行时,用于重置整个默认图形的命令为 {{1} }

注意:默认图形是当前线程的属性。此功能仅适用于当前线程。在 tf.compat.v1.reset_default_graph tf.compat.v1.Session 处于活动状态时调用此函数将导致不确定的行为。在调用此函数后使用任何以前创建的 tf.compat.v1.InteractiveSession tf.Operation 对象将导致不确定的行为。

提高 AssertionError:如果在嵌套图中调用此函数。

答案 4 :(得分:0)

不确定我是否遇到同样的问题,但是

tf.keras.backend.clear_session()

在构建和训练模型的单元格的开头(在我的例子中为Keras)有助于“消除混乱”,因此在重复运行同一单元格后,只有当前图形保留在TensorBoard可视化中。 / p>

环境:带有内置TensorBoard的Colab中的TensorFlow 2.0(tensorflow-gpu==2.0.0b1)(使用%load_ext tensorboard技巧)。