【发布时间】:2023-03-13 03:36:02
【问题描述】:
我正在尝试将函数迭代地拟合到研究应用程序中的数据,其中需要大量迭代。在每个函数中,我都在优化一个变量。为简单起见,我在一个最小的工作示例中重新创建了该问题,不包括该函数,但内存仍在攀升:
import numpy as np
import tensorflow as tf
import tensorflow.contrib.eager as tfe
import psutil as ps
import gc
tf.enable_eager_execution()
for i in range (50000):
w0=tfe.Variable(initial_value=np.ones((8,1)))
print(ps.virtual_memory().percent)
如果迭代次数足够多,内存会不断攀升。随着图的增长,从图构建的角度来看,这是有道理的,但是根据 Eager 中的文档,您可以按如下方式释放内存:
for i in range (50000):
w0=tfe.Variable(initial_value=np.ones((8,1)))
w0=None
print(ps.virtual_memory().percent)
但是内存继续攀升。如果我将变量从循环中取出并尝试分配给变量:
w0=tfe.Variable(initial_value=np.ones((8,1)))
for i in range (50000):
w0.assign(np.zeros((8,1)))
print(ps.virtual_memory().percent)
记忆似乎在继续攀升。最后,我尝试在每次迭代时运行垃圾收集器:
for i in range (50000):
w0=tfe.Variable(initial_value=np.ones((8,1)))
w0=None
gc.collect()
print(ps.virtual_memory().percent)
我的内存仍然增加了。
我是否遗漏了什么或者我误解了在急切执行中可能使用的变量?
【问题讨论】:
标签: tensorflow