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

Posted

技术标签:

【中文标题】从图中删除节点或重置整个默认图【英文标题】:Remove nodes from graph or reset entire default graph 【发布时间】:2016-02-19 07:40:21 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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()

【讨论】:

为什么需要sess = tf.InteractiveSession()【参考方案2】:

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

要清除默认图表,您可以使用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

【讨论】:

在 tensorflow >= 1.0 中为g.as_default() 拼写:在 with 语句中,您忘记了 g.as_default() 中的下划线 为什么需要sess = tf.InteractiveSession()【参考方案3】:

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

创建自定义图表:

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

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

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

【讨论】:

“一旦运行,图形就会被清理”我不认为这是真的。【参考方案4】:

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

tf.keras.backend.clear_session()

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

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

【讨论】:

【参考方案5】:

Tensorflow 2.0 兼容答案:在 Tensorflow Version >= 2.0 中,在图形模式下运行时重置整个默认图形的命令是 tf.compat.v1.reset_default_graph.

注意:默认图是当前线程的属性。该函数仅适用于当前线程。在 tf.compat.v1.Sessiontf.compat.v1.InteractiveSession 处于活动状态时调用此函数将导致未定义的行为。在调用此函数后使用任何以前创建的 tf.Operationtf.Tensor 对象将导致未定义的行为。

引发AssertionError:如果在嵌套图中调用此函数。

【讨论】:

以上是关于从图中删除节点或重置整个默认图的主要内容,如果未能解决你的问题,请参考以下文章

以最小成本断开无向加权图中的两个节点

在 D3js 力图中添加和删除节点

从 Xml 广告文件中删除整个节点?

Osmnx 在组合图中找不到节点之间的路径?

如何从场景包场景中删除所有节点?

tarjan算法 求割点