欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

keras做CNN的訓練誤差loss的下降操作

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

采用二值判斷如果確認是噪聲,用該點上面一個灰度進行替換。

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

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

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

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

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

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

結果事與愿違,但是在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的設置

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

2.BatchNormalization()的設置

from keras.layers.normalization import BatchNormalization

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

model.add(BatchNormalization())

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

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

其實在我自己的實驗中,后來調整成:

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

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

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

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

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

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

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

8 使用ReduceLROnPlateau 對學習率進行衰減,當下降很慢時,學習率自動調整,可以起到一部分作用,

我在模型中使用的是RMSprop ,RMSprop本身帶有學習率的自動調整,但是,我加上ReduceLROnPlateau ,依然可以看到學習率變化很慢時,設置的這個ReduceLROnPlateau 有調整。

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

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

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

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

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ù)據,900個訓練集的,下一次變成,900*0.9=810個數(shù)據,同時,還發(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無法讀取,運行的時候,默認的是1所以我定義的 n_epoch=20是失效。

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

補充知識:keras中l(wèi)oss與val_loss的關系

loss是訓練集的損失值,val_loss是測試集的損失值

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

train loss 不斷下降,test loss不斷下降,說明網絡仍在學習;(最好的)

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

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

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

train loss 不斷上升,test loss不斷上升,說明網絡結構設計不當,訓練超參數(shù)設置不當,數(shù)據集經過清洗等問題。(最不好的情況)

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

相關文章

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

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

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

    python 判斷網絡連通的實現(xiàn)方法

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

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

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

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

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

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

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

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

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

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

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

    Django報錯TemplateDoesNotExist的問題及解決

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

    深入了解Python中Requests庫的使用

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

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

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

最新評論