我在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 回答
无需运行
sess.run(correct_prediction)
- 它是一个张量流图变量,accuracy
变量依赖于该变量 . 这意味着在任何情况下都会在调用sess.run(accuracy)
期间对其进行评估 .您可能通过在每次迭代中创建新的
correct_prediction
和accuracy
变量来修改图形 . 这也是不必要的 - 它们可以移动到循环之外,并且每次调用sess.run
时都会进行评估 . 所以你的内循环就像是