基於CNN的Kaggle手寫數字識別

具體代碼和文本見我上傳的資源:CNN和rf兩種實現

提交次數:3 次運行環境:

python 版 本 :3.7.4 tenserflow 版本:2.0.0 numpy 版本:1.17.4

  1.  
   
CNN 實現:

 

使用兩層卷積網絡,在輪數不斷連續增加但是準確率不增時停止。

定義交叉熵爲損失函數,最小化交叉熵

 

準確率計算:

 

模型創建過程中需要創建權重和偏置項,權重在初始化時應該加入少量的噪聲來打破對稱性   以及避免 0 梯度。可以用較小的正數來初始化偏置項,以避免神經元節點輸出恆爲 0 的問題。爲了不在建立模型的時候反覆做初始化操作,我們定義兩個函數用於初始化。舉例:第一次卷積初   始化權重,輸出 32 個通道

 

將數據集分成多個 batch,分批依次訓練

 

訓練:

 

數據增強:爲了減少過擬合,在輸出層之前加入 dropout。用 placeholder 來代表一個神經元的輸出在 dropout 中保持不變的概率。加入 dropout 防止過擬合

命令行運行 digit.py 將結果存到 res.csv 中。將結果按照網站要求排版並提交,兩次結果如下:

準確率:97.314%

可以看得出來絕大多數預測都正確,而預測錯誤的圖片,多是因爲圖片具有迷惑性,即  使肉眼分辨也有可能識別錯誤。

 

  1. 結果分析與思考

提交三次,最佳結果準確率:97.314%。

使用全連接神經網絡處理圖像存在全連接層的參數太多的問題,參數增多除了導致計算速度   減慢,還很容易導致過擬合的問題,過擬合也是使用隨機森林算法常見的一種錯誤。隨機森林和   全鏈接神經網絡無法很好地處理好圖像數據,然而 CNN 卻很好地克服了這些缺點。所以需要一個合理的神經網絡結構來有效的減少神經網絡中參數的個數,卷積神經網絡就可以更好的達到這個   目的,原因就在於 CNN 在圖像視覺處理上有着獨特的優點,主要在於局部感知的應用適合處理圖像的局部特徵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章