6

我正在測試卷積神經網絡上的打印數字(0-9)。它在MNIST Dataset上提供了99%以上的準確性,但是當我使用計算機上安裝的字體(Ariel,Calibri,Cambria,Cambria math,Times New Roman)嘗試它時,訓練了字體生成的圖像(每種字體104 25種字體 - ?每個字體4幅圖像(差別不大))訓練誤差率不低於80%,即20%的準確率爲什麼CNN上的數字識別

這裏是 「2」 的數字圖像樣本 -

"2" Number Images

我調整了每個圖像的大小28 x 28.

這裏有更多的細節: -

訓練數據大小= 28 x 28圖像。 網絡參數 - 作爲LeNet5 網絡架構 -

Input Layer -28x28 
| Convolutional Layer - (Relu Activation); 
| Pooling Layer - (Tanh Activation) 
| Convolutional Layer - (Relu Activation) 
| Local Layer(120 neurons) - (Relu) 
| Fully Connected (Softmax Activation, 10 outputs) 

這工作,在MNIST給予99 +%的準確率。爲什麼計算機生成的字體很糟糕? CNN可以處理很多數據差異。

+0

什麼是您使用的完整拓撲結構?它是原始的LeNet5,還是你改變了任何隱藏層?如果你從零開始訓練一個新模型,過度擬合應該看起來像另一個99 +%的成功率;你的20%表明了某種非常不同的問題。 – Prune

+0

是的,它是原創的LeNet5,圖層如上所述,它使用MNIST數據集,但不是我的數據集,我的數據集大小爲1036個圖像,每個數字104。 – kumar030

回答

0

這可能是一個過度擬合的問題。當您的網絡太複雜而無法解決問題時,可能會發生這種情況。 檢查這篇文章:http://es.mathworks.com/help/nnet/ug/improve-neural-network-generalization-and-avoid-overfitting.html

+0

我應該從網絡中刪除圖層嗎?您可以提供任何建議。 – kumar030

+0

我不是非常愚蠢的與CNN,但我想你可能有太多的隱藏層。可能對你有用:http://cs231n.github.io/neural-networks-1/#arch << ......似乎如果數據不夠複雜以防止更小的神經網絡可能會更好過度配合>> –

+0

您訓練網絡有多少個時代?你的數據集的大小是多少? –

0

它絕對看起來像一個過度擬合的問題。我看到你有兩個卷積層,兩個最大池層和兩個完全連接。但總共有多少重量?你每班只有96個例子,這肯定比你在CNN中的權重小。請記住,您的訓練集中的實例至少比CNN中的權重多5倍。

你有兩個解決方案,以提高你的CNN:

  • 搖訓練集中的每個實例。你每個數字大約1像素左右。它已經將你的訓練集乘以9.
  • 使用變壓器層。它會在每個時代爲每個數字添加彈性變形。它會通過人爲地增加你的訓練集來加強很多學習。而且,它可以更有效地預測其他字體。
2

我看到了兩個可能的問題:

預處理:MNIST不僅28px X 28px,也:從NIST

將原來的黑色和白色(二層)圖像尺寸標準化以適應20x20像素盒子,同時保持其縱橫比。作爲歸一化算法使用的抗鋸齒技術的結果,所得圖像包含灰度級。通過計算像素的質心,並將圖像平移以將該點定位在28x28場的中心,圖像以28x28圖像爲中心。

來源:MNIST website

過度擬合

  • MNIST有60000個訓練樣本和10,000個測試例。你有多少?
  • 您是否嘗試輟學(請參閱paper)?
  • 你試過數據集增強技術嗎? (例如稍微改變圖像,可能會改變圖像的比例,也可能會增加噪點 - 但是,我不認爲這些會有幫助)
  • 您是否嘗試過較小的網絡? (和有多大的過濾器/多少過濾器,你呢?)

備註

有趣的想法!您是否嘗試在數據上應用經過培訓的MNIST網絡?結果是什麼?

+1

好點。只是爲了添加另一個選項,也可以考慮批量標準化(https://arxiv.org/abs/1502.03167)。 –