我在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);是每晚都可以吗?我现在不想被迫进行操作系统升级。
答案 0 :(得分:4)
sess.run(correct_prediction)
- 它是一个张量流图变量,accuracy
变量依赖于该变量。这意味着在任何情况下都会在调用sess.run(accuracy)
期间对其进行评估。correct_prediction
和accuracy
变量来修改图表。这也是不必要的 - 它们可以移动到循环之外,并且每次调用sess.run
时都会进行评估。所以你的内部循环就像是for i in range(niter):
# Train
_, c = sess.run([train_step, cost])
print sess.run(accuracy)