我对tensorflow如何处理内存有些麻烦。我希望在每次迭代后从我的记忆中删除张量。
我正在使用tensorflow EagerExecution。我尝试过Variables和简单的张量。 tf.assign不能胜任这项工作。使用越来越多的内存。我想这是正常的,以便能够计算梯度。即使我在每次迭代结束时应用了一些虚拟优化器,内存也不会被释放(更准确地说,它有时会发生,但全球趋势是内存使用正在增长)。
那么可以手动删除吗?
import tensorflow as tf
import tensorflow.contrib.eager as tfe
import numpy as np
import time as ti
tf.enable_eager_execution()
for i in range(150):
all_subject=tfe.Variable(np.random.rand(200, 500), dtype=tf.float32)
tf.assign(all_subject, np.random.rand(200,500) )
ti.sleep(1.0)
del all_subject
ti.sleep(0.5)
分配情况如下:
答案 0 :(得分:2)
根据the documentation on eager execution,
在急切执行期间,状态对象的生命周期由其相应Python对象的生命周期决定。
因此,即使没有明确的del
,也不应该在代码中发现任何内存泄漏:将变量重新分配给其他内容的简单事实应该释放内存。
然而,这不是发生的事情,我观察到与你相同的内存泄漏。
因此,这可能是一个(严重的)错误,您可以提交here。