tf.reset_default_graph内存泄漏

时间:2018-04-20 12:53:14

标签: python session tensorflow graph memory-leaks

我正在尝试使用TensorFlow中的自动超参数优化进行一些实验,因此我的程序的主循环需要重复创建一个图形,运行它,销毁它以释放内存以用于下一次迭代。为此,我有:

tf.reset_default_graph()
sess = tf.InteractiveSession()

除了一个之外,它似乎在所有方面都有效:每次循环,程序都会泄漏数百兆的内存。我没有分配任何其他类型的复杂数据结构,这些数据结构可能是内存泄漏的候选者,所以我可能错误地使用了tf.reset_default_graph

我做错了什么?

计划在https://github.com/russellw/tf-examples/blob/master/sko_lstm.py

2 个答案:

答案 0 :(得分:1)

tf.InteractiveSession()替换为with tf.Session():语句。前者设计用于控制台,因此它启动,使自己成为默认设置并且不会释放资源,除非您手动调用sess.close()(这很容易忘记,除此之外)应该考虑例外)。因此,您的代码最终会有许多并行会话,每个会话都保存其资源。 <{1}}在会话激活时不会释放这些资源。

tf.reset_default_graph()语句确保上下文管理器将调用with并且会话将关闭。

答案 1 :(得分:1)

如果对某人不起作用,请查看 scriptifier。它是一个装饰器,允许在单独的脚本中运行一个函数。它会自动生成脚本并负责传递参数并返回,只要它们是可腌制的或 keras 模型或 keras 模型列表...(有关文档,请参阅:github

它与 pip install scriptifier

一起安装