介紹
MNIST DATABASE CNN 架構手寫數字辨識。
Mnist
MNIST 是一個手寫數字的圖像資料集,我們將用於圖像辨識的範例之中。
MNIST 資料集,可至 THE MNIST DATABASE 下載。
MNIST 資料集常用於機器學習訓練和測試的教學。
資料集包含 60000 個訓練圖片和 10000 個測試圖片,每個圖片大小是 28 * 28 像素。
Import
os 模組 用指定 GPU運行,如未裝 Nvidia cuda toolkit,可移除前三行 。
mnist datasets 已經包在tensorflow底下可直接呼叫使用。
1 | import os |
Preprocessing
x_Train 為訓練資料,x_Train 為訓練資料label ,可查看資料數
print(x_Train.shape)
=> (60000, 28, 28) (資料筆數,像素,像素)。print(y_Train)
=> [5 0 4 … 5 6 8] > 三維轉為四維矩陣以符合CNN的需求
MNIST 圖片為灰階因此其channe 為 1 。x_Train4D / 255
=>標準化 數字 0 or 1 ,圖像的像素點介於 0~255 之間 。
Onehot Encoding =>[5 0 4 ... 5 6 8] => [0000010000 ,0000000000,0000100000,.......]
1 | ## step 1 資料預處理 Preprocess:處理後產生 features (影像特徵值)與 label (數字的真實值) |
Construct Model
附圖為卷積進行圖
1 | model = Sequential() |
下方為模型圖
Configure Training method && Train
loss='categorical_crossentropy'
目標值應該是分類格式。optimizer='adam'
偏離校正,使得每一次的學習率都會有個確定的範圍。
1 | model.compile(loss='categorical_crossentropy', |
Evaluate && Save Model
1 | # step 4 評估模型準確率:使用測試資料評估模型準確率 |
Figure presentation
1 | import matplotlib.pyplot as plt |
設備為 NVIDIA GeForce GTX 1650。
下方預測圖
下方為 acc
下方為 loss
放入照片辨識
使用 opencv 進行照片處理
1 | from keras.models import load_model |
下方為小畫家寫字辨識,實測結果百分之四十正確,白底黑字。
最好使用的是黑底白字,識別效果會好一點。因爲 MNIST 數據集中的字體也是黑底白字。雖然也能識別,但是最好還是用黑底白字。
下方為小畫家寫字辨識,實測結果百分之六十正確,黑底白字。
本文中有錯解說,歡迎指教!
可至此連結 點選
圖片建議放黑底白字進行辨識
參考網站
如果您喜歡我的文章,請幫我按五下 ,感謝大家。