2016-08-02 37 views
3

我在OSX 10.9.5 Mavericks上运行tensorflow 0.10.0rc0。有大约25k个训练样例,250个特征(x),15个类(y_),预测(y)是单隐层NN感知器。tensorflow - 内存泄漏?

简单培训环路下面的代码片段似乎有大量的内存泄漏(超过=〜200次迭代绿带的顺序10S的 - 带来了我的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需要优胜美地或更高,所以我不能生成我自己的.whl文件(AFAIK )来源;是夜间whl可用吗?我现在不愿被强制进入操作系统升级

+0

编辑:我添加了测试精度计算;我不知道如何从循环中删除它,因为y需要在训练步骤后被评估 – jtlz2

回答

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

感谢@Simon,它帮助大量 - RAM使用更加稳定。我怀疑剩余的“泄漏”来自循环内的第二次测试集精度评估。现在要解决它.... – jtlz2