在TensorFlow中多次初始化变量会泄漏内存

时间:2017-11-20 14:09:54

标签: python python-3.x tensorflow

这是我的示例代码:

N = 3000
with tf.variable_scope("scope") as scope:
    A = tf.Variable(np.random.randn(N,N), dtype=tf.float32, name='A')

sess = tf.Session()

for _ in range(100):
    sess.run(tf.global_variables_initializer())

运行代码会在我的计算机上分配> 10GB的内存。我想多次重新训练我的模型,而不必每次都将整个图重置为默认图。我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

我发现了问题。对于将来遇到同样问题的其他人:问题似乎是每次在循环中创建一个新的初始化操作。我的解决方案是重用初始化操作。这可以修复内存泄漏问题。对我来说:

N = 3000
tf.reset_default_graph()
with tf.variable_scope("scope") as scope:
    A = tf.Variable(np.random.randn(N,N), dtype=tf.float32, name='A')

varlist = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope="scope")
init = tf.variables_initializer(varlist) # or tf.global_variables_initializer()
for _ in range(100):
    sess = tf.Session()
    sess.run(init) # here we reuse the init operation