? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?模型訓(xùn)練
訓(xùn)練模型時典挑,模型的準(zhǔn)確率跟?
1.數(shù)據(jù)量
2.batch_size 的大小
3.epochs 的次數(shù)
4.學(xué)習(xí)率的大小都有關(guān)
如果測試集的準(zhǔn)確率小于訓(xùn)練集的,可能的原因是:
1.沒有打亂測試集
2.過擬合
3.學(xué)習(xí)率太高
改進(jìn)
1.預(yù)測時使用?from sklearn.utils import shuffle 該句,調(diào)用 shuffle 模塊將數(shù)據(jù)打亂
這個方法是行不通的=掌纭7勰怼F敲肌恃泪!因為測試集的圖片和標(biāo)簽是一一對應(yīng)的队腐,如果打亂湿硝,就無法預(yù)測了
2.適當(dāng)?shù)慕档蛯W(xué)習(xí)率(0.0001)
優(yōu)化器 sgd 的學(xué)習(xí)率一般設(shè)置為0.01P角啊!很重要,batch_size = 75(SGD 優(yōu)化器的 batch_size 一般設(shè)置的大些关斜,效果好)
通過代碼測試示括,SGD 的學(xué)習(xí)率與訓(xùn)練次數(shù)成比例,lr / echo 約等于 1/200
----------------------------------------------------------------
opt = keras.optimizers.RMSprop(learning_rate=0.0001, decay=1e-6)
而 RMSprop 的學(xué)習(xí)率一般為 0.0001,batch_size = 32
3.數(shù)據(jù)量小痢畜,使用數(shù)據(jù)增強(qiáng)
4.利用正則化
5.利用 dropout 層
6.找個好的優(yōu)化器會節(jié)省大量訓(xùn)練時間
使用? SGD 優(yōu)化器訓(xùn)練 300 次出現(xiàn)的效果和使用 Adam 優(yōu)化器訓(xùn)練 40 次出現(xiàn)的現(xiàn)象差不多垛膝,準(zhǔn)確率都開始震蕩,說明模型不穩(wěn)定.但是訓(xùn)練200-300次的預(yù)測效果要比60次的效果好丁稀,200-300次訓(xùn)練繁涂,雖然準(zhǔn)確率和 loss 都在 0.8 左右,但是實際預(yù)測結(jié)果很準(zhǔn)確:
而訓(xùn)練60次的結(jié)果確實這樣:
對 cnn 卷積神經(jīng)網(wǎng)絡(luò)的思考:
訓(xùn)練神經(jīng)網(wǎng)絡(luò)需要大量的數(shù)據(jù)扔罪,如 cifar10 數(shù)據(jù)集(small dataset),里面有 5 萬張 10 種類別的圖片桶雀,利用cnn結(jié)構(gòu)矿酵,使用 RMSprop 優(yōu)化器,經(jīng)過 100 次訓(xùn)練矗积,訓(xùn)練時還要使用數(shù)據(jù)增強(qiáng)技術(shù)全肮,最終模型的準(zhǔn)確率在測試集上可以達(dá)到 80% 左右.若使用 SGD 優(yōu)化器,不使用數(shù)據(jù)增強(qiáng)技術(shù)棘捣,大約需要訓(xùn)練 200 次左右辜腺,可達(dá)到 80% 的準(zhǔn)確率。隨著訓(xùn)練次數(shù)的增加,模型在訓(xùn)練集上的準(zhǔn)確率先增后減(RMSprop -- 100 次评疗,SGD--200次测砂,Adam--70次左右),說明模型不穩(wěn)定百匆。而且由此也可以看出優(yōu)化器的性能:Adam >?RMSprop >?SGD
神經(jīng)網(wǎng)絡(luò)的優(yōu)化
1.當(dāng)激活函數(shù)的輸出為有限值時砌些,基于梯度的方法更穩(wěn)定
????當(dāng)激活函數(shù)的輸出為無限值時,建議調(diào)小學(xué)習(xí)率
2.sigmoid 函數(shù)的導(dǎo)數(shù)分布在0-0.25之間加匈,在進(jìn)行反向傳播時存在多個0-0.25之間的數(shù)相乘存璃,導(dǎo)致結(jié)果變的很小,出現(xiàn)梯度消失
3.使用 relu 函數(shù)時雕拼,需要將數(shù)據(jù)歸一化纵东,變成正態(tài)分布,減小參數(shù)分布的巨大變化啥寇,設(shè)置更小的學(xué)習(xí)率篮迎,減緩負(fù)神經(jīng)元數(shù)量