如何从内存中手动删除张量?

时间:2018-05-31 12:48:07

标签: python tensorflow memory-management

我对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)

分配情况如下:

Memory profile

1 个答案:

答案 0 :(得分:2)

根据the documentation on eager execution

  

在急切执行期间,状态对象的生命周期由其相应Python对象的生命周期决定。

因此,即使没有明确的del,也不应该在代码中发现任何内存泄漏:将变量重新分配给其他内容的简单事实应该释放内存。

然而,这不是发生的事情,我观察到与你相同的内存泄漏。

因此,这可能是一个(严重的)错误,您可以提交here