1 ____________________________________________________________________________________________________
2 Layer (type) Output Shape Param # Connected to
3 ====================================================================================================
4 convolution2d_1 (Convolution2D) (None, 30, 24, 24) 780 convolution2d_input_1[0][0]
5 ____________________________________________________________________________________________________
6 maxpooling2d_1 (MaxPooling2D) (None, 30, 12, 12) 0 convolution2d_1[0][0]
7 ____________________________________________________________________________________________________
8 convolution2d_2 (Convolution2D) (None, 15, 10, 10) 4065 maxpooling2d_1[0][0]
9 ____________________________________________________________________________________________________
10 maxpooling2d_2 (MaxPooling2D) (None, 15, 5, 5) 0 convolution2d_2[0][0]
11 ____________________________________________________________________________________________________
12 dropout_1 (Dropout) (None, 15, 5, 5) 0 maxpooling2d_2[0][0]
13 ____________________________________________________________________________________________________
14 flatten_1 (Flatten) (None, 375) 0 dropout_1[0][0]
15 ____________________________________________________________________________________________________
16 dense_1 (Dense) (None, 128) 48128 flatten_1[0][0]
17 ____________________________________________________________________________________________________
18 dense_2 (Dense) (None, 50) 6450 dense_1[0][0]
19 ____________________________________________________________________________________________________
20 dense_3 (Dense) (None, 10) 510 dense_2[0][0]
21 ====================================================================================================
22 Total params: 59933
23 ____________________________________________________________________________________________________
24 Train on 60000 samples, validate on 10000 samples
25 Epoch 1/69
26 34s - loss: 0.4248 - acc: 0.8619 - val_loss: 0.0832 - val_acc: 0.9746
27 Epoch 2/69
28 35s - loss: 0.1147 - acc: 0.9638 - val_loss: 0.0518 - val_acc: 0.9831
29 Epoch 3/69
30 35s - loss: 0.0887 - acc: 0.9719 - val_loss: 0.0452 - val_acc: 0.9855
31 、、、
32 Epoch 66/69
33 38s - loss: 0.0134 - acc: 0.9955 - val_loss: 0.0211 - val_acc: 0.9943
34 Epoch 67/69
35 38s - loss: 0.0114 - acc: 0.9960 - val_loss: 0.0171 - val_acc: 0.9950
36 Epoch 68/69
37 38s - loss: 0.0116 - acc: 0.9959 - val_loss: 0.0192 - val_acc: 0.9942
38 Epoch 69/69
39 38s - loss: 0.0132 - acc: 0.9958 - val_loss: 0.0188 - val_acc: 0.9978
40 Large CNN Error: 0.22%
41
42 real 41m47.350s
43 user 157m51.145s
44 sys 6m5.829s
這是目前的最好結(jié)果,99.78%,然而還有很多地方可以提升,下次準(zhǔn)確率提高了再來更 。
總結(jié):
1.CNN在圖像識(shí)別上確實(shí)比傳統(tǒng)的MLP有優(yōu)勢(shì),比傳統(tǒng)的機(jī)器學(xué)習(xí)算法也有優(yōu)勢(shì)(不過也有通過隨機(jī)森林取的很好效果的)
2.加深網(wǎng)絡(luò)結(jié)構(gòu),即多加幾層卷積層有助于提升準(zhǔn)確率,但是也能大大降低運(yùn)行速度
3.適當(dāng)加Dropout可以提高準(zhǔn)確率
4.激活函數(shù)最好,算了,直接說就選relu吧,沒有為啥,就因?yàn)閞elu能避免梯度消散這一點(diǎn)應(yīng)該選它,訓(xùn)練速度快等其他優(yōu)點(diǎn)下次專門總結(jié)一篇文章再說吧。
5.迭代次數(shù)不是越多越好,很可能會(huì)過擬合,自己可以做一個(gè)收斂曲線,keras里可以用history函數(shù)plot一下,看算法是否收斂,還是發(fā)散。