当我意识到即使我在for循环中关闭当前会话时,我只是在尝试一些四元数神经网络的东西,但我的程序大量减速,并且由于ops正在构建而导致内存泄漏。这是我的代码:Tensorflow:甚至在关闭会话时发生内存泄漏?
for step in xrange(0,200):#num_epochs * train_size // BATCH_SIZE):
338
339 with tf.Session() as sess:
340
341 offset = (BATCH_SIZE) % train_size
342 #print "Offset : %d" % offset
343
344 batch_data = []
345 batch_labels = []
346 batch_data.append(qtrain[0][offset:(offset + BATCH_SIZE)])
347 batch_labels.append(qtrain_labels[0][offset:(offset + BATCH_SIZE)]
352 retour = sess.run(test, feed_dict={x: batch_data})
357
358 test2 = feedForwardStep(retour, W_to_output,b_output)
367 #sess.close()
问题似乎来自test2 = feedForward(..)
。我需要在执行retour
一次后声明这些操作,因为retour
不能作为占位符(我需要遍历它)。没有这条线,程序运行得非常好,速度快,没有内存泄漏。我不明白为什么看起来TensorFlow正试图“拯救” test2
即使我关闭会话...
谢谢!我会尝试你的第二个命题,测试是一个我可以在for循环之外定义的操作(就像你在1点建议的那样)。 –
不幸的是,我得到了一个很好的“会话图是空的,在调用run()之前向图中添加操作”使用tf.Graph.as_default() –
我的好像似乎工作!非常感谢 ! –