【问题标题】:Tensorflow delete graph and free up resourcesTensorFlow 删除图并释放资源
【发布时间】:2020-02-14 13:43:29
【问题描述】:

我创建一个张量流图并定义一些张量并运行一些东西。完成后,我想删除我制作的图表,并释放所有资源。我该怎么做?

temporary_graph = tf.Graph()
with temporary_graph.as_default(), tf.Session() as sess:
    foo = tf.placeholder(tf.float32, (2,2))
    bar = foo@foo
    res = sess.run(bar, feed_dict={foo: np.ones((2,2))})

print(res)
delete_graph_and_free_up_resources(temporary_graph)

This answer 声称上下文管理器会清理图表,但事实并非如此,文档也没有声明这样的事情:

>>> temporary_graph.get_operations()
[<tf.Operation 'Placeholder' type=Placeholder>, <tf.Operation 'matmul' type=MatMul>]

处理图表的最佳方法是什么?

【问题讨论】:

  • 您可以使用sess.close() 释放与会话相关的所有资源。
  • @Hamed,但这并没有清除图表。张量中的实际值随着会话而消失,但图表仍然存在。

标签: tensorflow


【解决方案1】:

这不是那么简单,为了释放图表正在使用的资源,您需要丢失对该图表的每个引用,以便 Python 可以请求将其从内存中删除。这意味着删除对图的直接引用,但也删除引用图的对象(和传递的)。这包括操作、张量和会话等。在您的示例中,您需要执行以下操作:

del temporary_graph, sess, foo, bar, res

这应该可以释放内存(不确定在某些情况下是否需要调用garbage collector)。

您可能不会,您可以在函数中执行此操作,因为它取决于程序中的实时引用。但是,如果您将与图表相关的所有引用保留在函数或对象中,您应该能够做到这一点。

【讨论】:

    【解决方案2】:

    我正在使用 tensorflow keras,但我的方法是简单地清除会话:

    tensorflow.keras.backend.clear_session()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-12
      • 2015-03-15
      • 1970-01-01
      • 2018-12-08
      • 2012-01-08
      • 2012-05-04
      • 1970-01-01
      • 2020-03-06
      相关资源
      最近更新 更多