首页 文章

tensorflow - 内存泄漏?

提问于
浏览
3

我在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 回答

  • 4
    • 无需运行 sess.run(correct_prediction) - 它是一个张量流图变量, accuracy 变量依赖于该变量 . 这意味着在任何情况下都会在调用 sess.run(accuracy) 期间对其进行评估 .

    • 您可能通过在每次迭代中创建新的 correct_predictionaccuracy 变量来修改图形 . 这也是不必要的 - 它们可以移动到循环之外,并且每次调用 sess.run 时都会进行评估 . 所以你的内循环就像是

    for i in range(niter):
        # Train
        _, c = sess.run([train_step, cost])
        print sess.run(accuracy)
    

相关问题