2

我在 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有没有一种方法可以在循环完成后完全删除存储的内容?

4

2 回答 2

2

我解决此问题的方法是添加以下内容以在每个循环处重置图表。

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

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

于 2019-08-12T17:07:47.117 回答
0

GPflow 的自述页面有一个链接,指向不错的提示和技巧笔记本。在那里你可以在第一个项目中找到你的问题的答案:)

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

于 2019-08-12T18:31:10.697 回答