亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

keras做CNN的訓(xùn)練誤差loss的下降操作

 更新時間:2020年06月22日 15:00:50   作者:fitzgerald0  
這篇文章主要介紹了keras做CNN的訓(xùn)練誤差loss的下降操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

采用二值判斷如果確認(rèn)是噪聲,用該點上面一個灰度進(jìn)行替換。

噪聲點處理:對原點周圍的八個點進(jìn)行掃描,比較。當(dāng)該點像素值與周圍8個點的值小于N時,此點為噪點 。

處理后的文件大小只有原文件小的三分之一,前后的圖片內(nèi)容肉眼幾乎無法察覺。

但是這樣處理后圖片放入CNN中在其他條件不變的情況下,模型loss無法下降,二分類圖片,loss一直在8-9之間。準(zhǔn)確率維持在0.5,同時,測試集的訓(xùn)練誤差持續(xù)下降,但是準(zhǔn)確率也在0.5徘徊。大概真是需要誤差,讓優(yōu)化方法從局部最優(yōu)跳出來。

使用的activation function是relu,full connection layer是softmax分類函數(shù),優(yōu)化方法為RMsprop

難到是需要加入噪音更好,CNN中加入高斯噪音不是讓模型更穩(wěn)健的嗎?還有讓模型跳出局部最優(yōu)的好處,方便訓(xùn)練。

原意:降噪的目的是因為這批數(shù)據(jù)是樣本較少,用復(fù)印機(jī) 掃面出來的圖片,想著放入更干凈的數(shù)據(jù),模型更容易學(xué)習(xí)到本質(zhì)特征。

結(jié)果事與愿違,但是在keras中是可以加入noise的,比如加入高斯噪音

form keras.layers.noise import GaussianNoise

我在全連接層中加入

model.add(GaussianNoise(0.125))

后來查看了BatchNormalization的作用,發(fā)現(xiàn)在這個大殺器之后,好像很少有人用到初始化和其他的tricks,就可以讓模型表現(xiàn)的很好。

在第一層的Maxpooling后面加上,model.add(BatchNormalization()),效果非常顯著,第一次epoch的loss值只有0.63,acc也迅速上升,不會出現(xiàn)之前的卡在8.354一直不動,哪怕更換 leraning rate和使用Adagrad,都是一樣的,如果前面的5個epoch完,還是沒有太大的變化,后面幾乎不會收斂。

1,leraning rate的設(shè)置

#導(dǎo)入模塊,以rmsprop為例
from keras.optimizers import rmsprop
rmsprop=rmsprop(lr=0.1)#只是更改了學(xué)習(xí)率,其他的參數(shù)沒有更改,默認(rèn)學(xué)習(xí)率是0.001

2.BatchNormalization()的設(shè)置

from keras.layers.normalization import BatchNormalization

#網(wǎng)上不少人說,批規(guī)范化 加在輸入層的激活函數(shù)(層)的前面

model.add(BatchNormalization())

也有看到每一個隱藏層的激活函數(shù)前面全部加上BN的,但是我這個實驗中,效果很差。

3.在輸入數(shù)據(jù)的時候,依然加上train_x = data/255.0,對像素矩陣的取值放小到0-1之間,否則訓(xùn)練將很艱難。

其實在我自己的實驗中,后來調(diào)整成:

train_x-= np.mean(train_x, axis = 0)

發(fā)現(xiàn)效果更好

4.如果第一次的epoch的loss在個位數(shù),則很可能需要返回去重新構(gòu)建模型,加入更多的trick,如果最后的loss值依然沒有達(dá)到小數(shù),則也可能是難于訓(xùn)練,也需要加入其他的技巧?;蛘吣P痛罱ǖ挠袉栴},需要慎重檢查。

5. 建議使用網(wǎng)格搜索,從最重要的參數(shù)開始,搭建一個簡單的模型,然后取合理的超參數(shù),逐一進(jìn)行。

6 .也可以在卷積層中加正則化,比如:

C1 = Convolution2D(8 3, 3, border_mode='valid', init='he_uniform', activation='relu',W_regularizer=l2(regularizer_params))

7.有看到在kaggle中使用集成cnn的,分類錯誤率確實有下降。

8 使用ReduceLROnPlateau 對學(xué)習(xí)率進(jìn)行衰減,當(dāng)下降很慢時,學(xué)習(xí)率自動調(diào)整,可以起到一部分作用,

我在模型中使用的是RMSprop ,RMSprop本身帶有學(xué)習(xí)率的自動調(diào)整,但是,我加上ReduceLROnPlateau ,依然可以看到學(xué)習(xí)率變化很慢時,設(shè)置的這個ReduceLROnPlateau 有調(diào)整。

9 用數(shù)據(jù)增強(qiáng)的時候,也需要小心,圖片調(diào)整的幅度等均會對模型的正確率有影響。

10,對3個顏色的圖像轉(zhuǎn)換為gray以后,分類準(zhǔn)確率穩(wěn)定在 0.5左右,幾乎就是廢掉了,說明圖像的像素對于模型的影響巨大,后來了解到有“圖像超分辨率重建Super-Resolution”其實是可以對圖像做像素的分辨率更高。當(dāng)然也是可以手工用PS進(jìn)行插值等修圖。查了下,像mnist這樣的數(shù)據(jù)集都是經(jīng)過處理后才放入模型中的,所以,不能完全指望著CNN卷積池化就把所有的問題都解決掉,盡管圖像分類和識別正在像CNN轉(zhuǎn)移。

keras遇到的坑(可能是水平的問題,總之有困惑)

(1) 多次運行會在上一次運行過的數(shù)據(jù)上起作用,比如,

train_x , val_x , train_y, val_y = train_test_split(train_x, train_y, test_size=0.1, random_state=random_seed)

如果多次運行,則1000個數(shù)據(jù),900個訓(xùn)練集的,下一次變成,900*0.9=810個數(shù)據(jù),同時,還發(fā)現(xiàn),

train_y = to_categorical(label, num_classes =2),這里也可能出現(xiàn)問題,比如,二分類,在第一次運行后是,2行

第二次運行就變成4行

(2) 在做交叉驗證時

新版本epoch的寫法是epochs=

estimator = KerasClassifier(build_fn=baseline_model, epochs=20, batch_size=32, verbose=2)

如果用成下面老版本,則n_epoch無法讀取,運行的時候,默認(rèn)的是1所以我定義的 n_epoch=20是失效。

estimator = KerasClassifier(build_fn=baseline_model, n_epoch=20, batch_size=32, verbose=2)

補(bǔ)充知識:keras中l(wèi)oss與val_loss的關(guān)系

loss是訓(xùn)練集的損失值,val_loss是測試集的損失值

以下是loss與val_loss的變化反映出訓(xùn)練走向的規(guī)律總結(jié):

train loss 不斷下降,test loss不斷下降,說明網(wǎng)絡(luò)仍在學(xué)習(xí);(最好的)

train loss 不斷下降,test loss趨于不變,說明網(wǎng)絡(luò)過擬合;(max pool或者正則化)

train loss 趨于不變,test loss不斷下降,說明數(shù)據(jù)集100%有問題;(檢查dataset)

train loss 趨于不變,test loss趨于不變,說明學(xué)習(xí)遇到瓶頸,需要減小學(xué)習(xí)率或批量數(shù)目;(減少學(xué)習(xí)率)

train loss 不斷上升,test loss不斷上升,說明網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計不當(dāng),訓(xùn)練超參數(shù)設(shè)置不當(dāng),數(shù)據(jù)集經(jīng)過清洗等問題。(最不好的情況)

以上這篇keras做CNN的訓(xùn)練誤差loss的下降操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Python二維數(shù)組賦值問題

    解決Python二維數(shù)組賦值問題

    今天小編就為大家分享一篇解決Python二維數(shù)組賦值問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python 判斷網(wǎng)絡(luò)連通的實現(xiàn)方法

    python 判斷網(wǎng)絡(luò)連通的實現(xiàn)方法

    下面小編就為大家分享一篇python 判斷網(wǎng)絡(luò)連通的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 在Python中計算移動平均值的方法

    在Python中計算移動平均值的方法

    在這篇文章中,我們將看到如何在Python中計算移動平均值,移動平均是指總觀測值集合中固定大小子集的一系列平均值,它也被稱為滾動平均,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Python3使用turtle繪制超立方體圖形示例

    Python3使用turtle繪制超立方體圖形示例

    這篇文章主要介紹了Python3使用turtle繪制超立方體圖形,結(jié)合實例形式分析了Python使用海龜繪圖模塊turtle進(jìn)行復(fù)雜圖形繪制的相關(guān)原理與操作技巧,需要的朋友可以參考下
    2018-06-06
  • 實例講解Python中sys.argv[]的用法

    實例講解Python中sys.argv[]的用法

    在閱讀facenet網(wǎng)絡(luò)的代碼的時候,遇到了sys.argv[]這個函數(shù),所以下面這篇文章主要給大家介紹了關(guān)于Python中sys.argv[]用法的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • python--字典(dict)和集合(set)詳解

    python--字典(dict)和集合(set)詳解

    本文通過實例給大家介紹了python中字典和集合的知識小結(jié),非常不錯,具有參考借鑒價值,需要的的朋友參考下吧,希望能夠給你帶來幫助
    2021-09-09
  • opencv 形態(tài)學(xué)變換(開運算,閉運算,梯度運算)

    opencv 形態(tài)學(xué)變換(開運算,閉運算,梯度運算)

    這篇文章主要介紹了opencv 形態(tài)學(xué)變換(開運算,閉運算,梯度運算),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Django報錯TemplateDoesNotExist的問題及解決

    Django報錯TemplateDoesNotExist的問題及解決

    這篇文章主要介紹了Django報錯TemplateDoesNotExist的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 深入了解Python中Requests庫的使用

    深入了解Python中Requests庫的使用

    Requests是一個功能強(qiáng)大的Python?HTTP庫,用于發(fā)送HTTP請求,獲取響應(yīng)數(shù)據(jù),本文主要來和大家聊聊它的用法,需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07
  • Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)對切片命名清除索引的方法

    Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)對切片命名清除索引的方法

    這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)對切片命名清除索引的方法,結(jié)合實例形式分析了Python字符串截取及indices方法映射序列的相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03

最新評論