Tensorflow删除图表并释放资源

问题描述 投票:1回答:2

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

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>]

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

tensorflow
2个回答
1
投票

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

del temporary_graph, sess, foo, bar, res

并且这将使释放内存成为可能(不确定在某些情况下是否需要调用garbage collector

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


0
投票

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

tensorflow.keras.backend.clear_session()
© www.soinside.com 2019 - 2024. All rights reserved.