處理過擬合的一些方法

2021-10-23 03:37:15 字數 1487 閱讀 6377

防止過擬合的最簡單的方法就是減小模型大小,即減少模型中可學習引數的個數,當學習引數過多時候,就相當於乙個線性函式本來只需要兩個引數(乙個截距乙個斜率)就可以表達出來(當然樣本點是不會完全在直線上的,分布於直線兩側),但是這時候你給了5個引數,那麼所表達出來的線就會穿過更多的點,這個時候曲線會變成四次曲線,模型的泛化力會顯著下降。

乙個問題的解釋有兩種樣子,其中乙個是簡單的一種是複雜的,那麼最可能的就是那種簡單的解釋。一種常見的降低過擬合的方法就是強制讓模型權重只能取較小的值,從而限制模型的複雜度,這使得權重值的分布更加規則。

from keras import regularizers

model = models.sequential(

)model.add(layers.dense(

16, kernel_regularizer=regularizers.l2(

0.001

),activation=

'relu'

, input_shape=

(10000,)

))model.add(layers.dense(

16, kernel_regularizer=regularizers.l2(

0.001

),activation=

'relu'))

model.add(layers.dense(

1, activation=

'sigmoid'

))

l2(0.001) 的意思是該層權重矩陣的每個係數都會使網路總損失增加 0.001 * weight_

coefficient_value。注意,由於這個懲罰項只在訓練時新增,所以這個網路的訓練損失會

比測試損失大很多。

同時新增l1和l2正則化

regularizers.l1(

0.001

)regularizers.l1_l2(l1=

0.001

, l2=

0.001

)

對某一層使用 dropout,就是在訓練過程中隨機將該層的一些輸出特徵捨棄(設定為 0)

model = models.sequential(

)model.add(layers.dense(

16, activation=

'relu'

, input_shape=

(10000,)

))model.add(layers.dropout(

0.5)

)model.add(layers.dense(

16, activation=

'relu'))

model.add(layers.dropout(

0.5)

)model.add(layers.dense(

1, activation=

'sigmoid'

))

解決過擬合的一些方法

由於條件限制,比如資料不夠豐富 不夠代表性,你的模型很有可能出現過擬合。即你的模型試圖去記住所有的訓練資料,而不是學習資料的趨勢。雖然資料增強的方法能緩解一些,但往往插值出來的資料仍然很侷限。一般,我們有下面幾個方法來從模型的角度來解決過擬合問題。隨著訓練的進行,你發現迭代到某輪時,訓練誤差逐漸下降...

高併發的一些處理方法

最近一段時間一直在看一些高併發處理策略的文章,在此也稍微總結一下自己的心得 一.高併發 可以這麼理解高併發,在同一時間,有大量使用者同時訪問同乙個url,容易導致伺服器和資料庫資源被佔滿崩潰,資料庫的儲存和更新結果跟理想不一致,例如出現重複的資料記錄,多次新增記錄等資料錯亂問題。二.高併發的處理策略...

資料處理的一些方法

1 保留小數點後兩位 四捨五入alert num.tofixed 2 2 保留小數點後兩位 把後面捨去math.floor 15.7784514000 100 100 輸出結果為 15.77 yuantocent yuan yuantocent 5.55 100 呼叫時需要除以100之後數值才是對應...