2017-04-24 121 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