tensorflow - 内存泄漏?

时间:2016-08-02 07:44:01

标签: python memory-leaks tensorflow

我在OSX 10.9.5 Mavericks上运行tensorflow 0.10.0rc0。

大约有25k训练样例,250个特征(x),15个类(y_)和预测(y)是单隐藏层NN感知器。

以下一个简单的训练循环片段似乎有一个巨大的内存泄漏(大约10s的GBs超过~~ 200次迭代 - 降低我的MBP :():

import tensorflow as tf

# Initialize placeholders and variables etc...
...

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y,y_))
train_step = tf.train.GradientDescentOptimizer(lrate).minimize(cost)    

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for i in range(niter):
    # Train
    _,c=sess.run([train_step,cost])
    correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
    sess.run(correct_prediction)
    accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    print sess.run(accuracy)

    # EDIT: Calculate test error
    ytest=sess.run(y[itrain:itrain+itest,:])
    ytest_=sess.run(y_[itrain:itrain+itest,:])
    test_prediction = tf.equal(tf.argmax(ytest,1), tf.argmax(ytest_,1))
    test_accuracy=tf.reduce_mean(tf.cast(test_prediction,tf.float32))
    print sess.run(test_accuracy)

sess.close()

我做了一些明显错误的事情,或者这是一个错误的机会吗?谢谢!

PS:如果在后来的tensorflow构建中修复了这个问题,请注意bazel需要Yosemite或更高版本,因此我无法从源代码生成我自己的.whl文件(AFAIK);是每晚都可以吗?我现在不想被迫进行操作系统升级。

1 个答案:

答案 0 :(得分:4)

  1. 无需运行sess.run(correct_prediction) - 它是一个张量流图变量,accuracy变量依赖于该变量。这意味着在任何情况下都会在调用sess.run(accuracy)期间对其进行评估。
  2. 您可能通过在每次迭代中创建新的correct_predictionaccuracy变量来修改图表。这也是不必要的 - 它们可以移动到循环之外,并且每次调用sess.run时都会进行评估。所以你的内部循环就像是
  3. for i in range(niter):
        # Train
        _, c = sess.run([train_step, cost])
        print sess.run(accuracy)