2017-04-24 113 views
2

我已经开始tensorflow并一直遵循这个标准MNIST tutorialTensorflow MNIST教程 - 测试精度很低

然而,相比于预期的92%的准确率,在设定以及测试集不超出67%的培训获得的精度。 我熟悉softmax和多项式回归,已经获得超过94%的使用scratch python实现以及使用sklearn.linear_model.LogisticRegression

我曾试图使用CIFAR-10的数据集相同,并且在这种情况下,准确度太低,只是约10%,这是等于随机分配的类。这使我怀疑我的张量流的安装,但我不确定这一点。

这是my implementation of Tensorflow MNIST tutorial。我会请求是否有人可以看看我的实施。

回答

3

您构建了您的图表,指定损失函数,并创建了优化(这是正确的)。问题是你只用一次你的优化器:

sess_tf.run(train_step, feed_dict={x: train_images_reshaped[0:1000], y_: train_labels[0:1000]}) 

所以基本上你只运行一次梯度下降。很明显,只有朝着正确的方向迈出一小步,你才能快速融合。您需要沿线做一些事情:

for _ in xrange(many_steps): 
    X, Y = get_a_new_batch_from(mnist_data) 
    sess_tf.run(train_step, feed_dict={x: X, y_: Y}) 

如果您将无法弄清楚如何修改我的伪代码,请参阅教程,因为根据我的记忆,他们覆盖这个很好。

+0

感谢您指出。在教程中渐变渐变式下降,不知怎的,我已经意识到我不需要迭代,完全忽略了收敛概念。已经做出了改变和预期。 – codeahead

0
W = tf.Variable(tf.zeros([784, 10])) 
b = tf.Variable(tf.zeros([10])) 

W初始化可能会导致您的网络不学什么,但随机猜测。因为grad将为零,而backprop实际上根本不起作用。

您最好使用tf.Variable(tf.truncated_normal([784, 10], mean=0.0, stddev=0.01))来初始化W以获取更多信息,请参阅​​。

+0

我曾尝试过这种方法,但效果不佳,理由已由@Salvador Dali发现。 – codeahead