dropout學習筆記

2021-08-15 18:32:26 字數 1335 閱讀 6736

目的:

防止過擬合,讓一部分權值停止更新,減少權值之間的依賴

原理:

當網路有n個引數時,可以選擇的子網路個數有2^n種,當n很大時,選中相同子網路的概率很小,避免了對同乙個網路重複訓練,過分擬合到訓練集

以前我們網路的計算公式是:

採用dropout後計算公式就變成了:

上面公式中bernoulli函式,是為了以概率p,隨機生成乙個0、1的向量

在訓練的時候,以一定概率乘以上一層的輸出(即本層的輸入),這樣就相當於停止本次的權值

**:

#dropout函式的實現

def dropout(x, level):

if level < 0. or level >= 1:#level是概率值,必須在0~1之間

raise exception('dropout level must be in interval [0, 1[.')

retain_prob = 1. - level

#我們通過binomial函式,生成與x一樣的維數向量。binomial函式就像拋硬幣一樣,我們可以把每個神經元當做拋硬幣一樣

#硬幣 正面的概率為p,n表示每個神經元試驗的次數

#因為我們每個神經元只需要拋一次就可以了所以n=1,size引數是我們有多少個硬幣。

sample=np.random.binomial(n=1,p=retain_prob,size=x.shape)#即將生成乙個0、1分布的向量,0表示這個神經元被遮蔽,不工作了,也就是dropout了

print sample

x *=sample#0、1與x相乘,我們就可以遮蔽某些神經元,讓它們的值變為0

print x

x /= retain_prob

return x

#對dropout的測試,大家可以跑一下上面的函式,了解乙個輸入x向量,經過dropout的結果

x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32)

dropout(x,0.4)

列印結果

[1 0 1 1 1 0 1 1 0 1]

[ 1. 0. 3. 4. 5. 0. 7. 8. 0. 10.]

參考:

深度學習 Drop out

1.原理 在每個訓練批次的前向傳播中,以概率p保留部分神經元。目的是 簡化神經網路的複雜度,降低過擬合風險。根據保留概率p計算乙個概率向量r 1,0,1,0,0,1,1.然後保留部分節點。2.注意點 因為dropout一般只使用在訓練時,而測試時所有的神經元都會保留。為了使訓練和測試時對應,可以有以...

dropout原始碼學習

注 這是乙個學習筆記,不定時更新。裡面用到的技巧 1.max norm regularization 2.dropout 比例的設定,輸入層 隱層都可以執行dropout 輸入層一般不使用,如果使用的話keep prob 0.9 中間層的keep prob 0.5 0.8,常用0.5 3.優化演算法...

深度學習 dropout理解

深度神經網路的訓練是一件非常困難的事,涉及到很多因素,比如損失函式的非凸性導致的區域性最優值 計算過程中的數值穩定性 訓練過程中的過擬合等。其中,過擬合是很容易發生的現象,也是在訓練dnn中必須要解決的問題。過擬合我們先來講一下什麼是 過擬合 過擬合是指模型訓練到一定程度後,在訓練集上得到的測試誤差...