创建模型后在 python 循环中清理内存

Clear up memory in python loop after creating a model

我是 运行 python 中的一个 for 循环,其中每个循环都需要根据不同的数据创建模型(摘录如下所示)。每次创建的模型都不会从内存中删除,导致每次循环变慢。

import gc
for s in range(0, 5):
  X, Y = get_data()
  m = make_dgp_model(X, Y, Z_100, L)
  del m
  gc.collect()
  print('memory: {}'.format(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1000000))

给出输出:

memory: 460.025856
memory: 470.310912
memory: 486.764544
memory: 493.457408
memory: 499.523584

我知道 python 对其内存使用指针引用,并且在重用变量时它不会重写内存中的内容。出于这个原因,我尝试了 del m 然后使用垃圾收集器。这似乎不起作用。难道我做错了什么?有没有一种方法可以在循环完成后完全删除 m 中存储的内容?

我解决这个问题的方法是添加以下内容以便在每个循环中重置图形。

tf.reset_default_graph()
graph = tf.get_default_graph()
gpflow.reset_default_session(graph=graph)

this github 问题所示(见最后一条评论)。

GPflow 的自述文件页面有一个 link 漂亮的 提示和技巧 笔记本。您可以在第一个项目中找到您的问题的答案:)

https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/tips_and_tricks.ipynb