為什麼這篇conv2d意思鄉民發文收入到精華區:因為在conv2d意思這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者jikker (魯蛇王)看板deeplearning標題Re: [問題] 手寫數字辨識問題時間T...
有大大說想看改變後的辨識度&code
我就貼上來吧
其實我的最終目標是辨識 0~99 的手寫數字
但是因為樣本數不足 所以目前只辨識 0~60
資料分佈如下
0 : 85 1 : 860 2 : 2231 3 : 1521 4 : 1750 5 : 1302 6 : 1511
7 : 1671 8 : 1967 9 : 2426 10 : 3000 11 : 1423 12 : 1474 13 : 1307
14 : 1189 15 : 1243 16 : 1368 17 : 1164 18 : 1129 19 : 847 20 : 790
21 : 889 22 : 694 23 : 667 24 : 693 25 : 528 26 : 369 27 : 306
28 : 222 29 : 179 30 : 194 31 : 146 32 : 192 33 : 151 34 : 101
35 : 139 36 : 100 37 : 120 38 : 83 39 : 79 40 : 107 41 : 71
42 : 76 43 : 64 44 : 66 45 : 79 46 : 101 47 : 66 48 : 59
49 : 52 50 : 75 51 : 72 52 : 91 53 : 60 54 : 90 55 : 93
56 : 48 57 : 50 58 : 64 59 : 70 60 : 54
總訓練筆數為37618筆
測試資料為 每個數字隨機挑選50筆
*數字56 因為樣本數只有48 所以只有48筆
我使用 keras + tensorflow 每張圖片的size是 48*48
為了配合MINST 強制縮小為 28*28
程式碼如下
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(9,9), padding='same',
input_shape=(28,28,1), activation='relu'))
model.add(MaxPooling2D(pool_size=(5,5)))
model.add(Conv2D(filters=32, kernel_size=(5,5), padding='same',
activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.6))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(61 ,activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam',
metrics=['accuracy'])
train_history = model.fit(x=x_train4d_normalize, y=y_trainonehot,
validation_split=0.2, epochs=20, batch_size=300, verbose=1)
model.summary() 結果如下
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_19 (Conv2D) (None, 28, 28, 16) 1312
_________________________________________________________________
max_pooling2d_19 (MaxPooling (None, 5, 5, 16) 0
_________________________________________________________________
conv2d_20 (Conv2D) (None, 5, 5, 32) 12832
_________________________________________________________________
max_pooling2d_20 (MaxPooling (None, 2, 2, 32) 0
_________________________________________________________________
dropout_25 (Dropout) (None, 2, 2, 32) 0
_________________________________________________________________
flatten_9 (Flatten) (None, 128) 0
_________________________________________________________________
dense_25 (Dense) (None, 256) 33024
_________________________________________________________________
dropout_26 (Dropout) (None, 256) 0
_________________________________________________________________
dense_26 (Dense) (None, 512) 131584
_________________________________________________________________
dropout_27 (Dropout) (None, 512) 0
_________________________________________________________________
dense_27 (Dense) (None, 61) 31293
=================================================================
Total params: 210,045
Trainable params: 210,045
Non-trainable params: 0
打散前訓練狀況 大概在15次左右收斂
Epoch 20/20
30094/30094 [==============================] - 29s 972us/step - loss: 0.4049
- acc: 0.8804 - val_loss: 11.8239 - val_acc: 0.1683
準確度評估是 0.84186351706
打散後訓練狀況 大概10次左右就收斂
Epoch 20/20
30094/30094 [==============================] - 29s 957us/step - loss: 0.4240
- acc: 0.8767 - val_loss: 0.1844 - val_acc: 0.9490
準確度評估是 0.873031496063
光看數據是差別不大
但是實際運用結果 未打散前會整批錯 例如: 9全部認成7 之類的
打散後則是 某些圖片會認錯 但不致於整批錯了
也符合版上大大的說明 前幾批的資料對model影響很大
※ 引述《jikker (魯蛇王)》之銘言:
: 哈!
: 開版後第一個技術問題就由小魯來提問吧
: 我參考書上MNIST+CNN的範例
: 建立了以下架構
: 卷積層1 28*28 16層
: 池化層1 14*14 16層
: 卷積層2 14*14 36層
: 池化層2 7*7 36層
: 平坦層 1764 神經元
: 隱藏層 128 神經元
: 輸出層 10 神經元
: 完美達成了 99.5% 的辨識率
: 可是當訓練資料換成 我自己的資料時
: 辨識率就只有80%左右 而且這80% 是因為完全不認得 數字8跟9
: 所有數字8跟9的全部認錯 所以只有80%
: 放大神經元數或卷積、池化層數目也得到類似的結果
: 是因為我的訓練資料不足的關係嗎?
: 我看MNIST是各數字都有6000多筆
: 我的資料分佈如下
: 0 : 85
: 1 : 860
: 2 : 2231
: 3 : 1521
: 4 : 1750
: 5 : 1302
: 6 : 1511
: 7 : 1671
: 8 : 1967
: 9 : 2426
: 光看資料 感覺比較認不出來的應該是 0 或1 阿
: 另外為了彌補 資料量的差異 我有改變訓練資料
: 每個數字各取800個 出來訓練 (0太少 只能完整訓練)
: 再把每個數字隨機抽出50個出來驗證
: 9還是每個都認錯...
: 請問我的方向該怎麼修正呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.87.162.162
※ 文章網址: https://www.ptt.cc/bbs/deeplearning/M.1519873885.A.955.html