dropout原理學習

2022-05-09 03:18:08 字數 1905 閱讀 8847

dropout是指在深度網路的訓練中, 以一定的概率隨機地 「臨時丟棄」一部分神經元節點。

應用dropout之後前向傳播過程變為:

經過乙個p值的伯努利分布,乘以上一層的輸出,之後前向傳播,值為0的bp時不計算梯度。

dropout是帶有隨機性的,如果測試也做的話,網路的輸出就不穩定了。所以測試階段是沒有dropout的。

測試階段是前向傳播的過程。 在前向傳播的計算時, 每個神經元的引數要預先乘以概率係數p, 以恢復在訓練中該神經元只有p的概率被用於整個神經網路的前向傳播計算。

#

coding:utf-8

import

numpy as np

#dropout函式的實現

defdropout(x, level):

if level < 0. or level >= 1: #

level是概率值,必須在0~1之間

raise valueerror('

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

retain_prob = 1. -level

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

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

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

random_tensor = np.random.binomial(n=1, p=retain_prob, size=x.shape) #

即將生成乙個0、1分布的向量,0表示這個神經元被遮蔽,不工作了,也就是dropout了

print

(random_tensor)

x *=random_tensor

print

(x) x /=retain_prob

returnx#

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

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

dropout(x,0.4)

#[0 1 1 0 1 1 1 1 10]

[0. 2. 3. 0. 5. 6. 7. 8. 9. 0.]

[ 1.6666666 0. 0. 0. 8.333333 10.

11.666666 13.333333 0. 0. ]#放大後

但是我們可以看到有一句這麼的操作: x /= retain_prob,對失活後又進行了scale,*了1/(1-p),其中這裡的p表示的是失活率。

進行了解釋。

這裡的p指的是1-失活率。因為訓練的時候經過了*p的操作,而如果測試的時候不做改變,那麼測試的輸出就是訓練時候的1/p倍,那麼如果在訓練的時候在dropout之後,就*1/p之後,**的時候就不必做操作了。總的來說是為了保持輸出期望不變,輸出就會比較穩定。這就是inverted dropout。

樸素vanilla 版本:訓練時候因為隨機扔掉了一些節點,總期望變小,那麼**時候就全體縮小一點來保持一致。存在的問題:**過程需要跟著 dropout 策略做調整,哪些層取消了、加重了或者減輕了,都需要改。一不小心就會出錯。

機器學習 Dropout原理介紹

因為在機器學習的一些模型中,如果模型的引數太多,而訓練樣本又太少的話,這樣訓練出來的模型很容易產生過擬合現象。在訓練bp網路時經常遇到的乙個問題,過擬合指的是模型在訓練資料上損失函式比較小,準確率較高 如果通過畫圖來表示的話,就是擬合曲線比較尖,不平滑,泛化能力不好 但是在測試資料上損失函式比較大,...

機器學習 Dropout原理介紹

機器學習 dropout原理介紹 因為在機器學習的一些模型中,如果模型的引數太多,而訓練樣本又太少的話,這樣訓練出來的模型很容易產生過擬合現象。在訓練bp網路時經常遇到的乙個問題,過擬合指的是模型在訓練資料上損失函式比較小,準確率較高 如果通過畫圖來表示的話,就是擬合曲線比較尖,不平滑,泛化能力不好...

深度學習 Dropout原理及其python實現

1 dropout簡述 dropout是解決神經網路模型過擬合的一種常用方法。dropout是指在神經網路訓練過程中,以一定的概率隨機丟棄神經元 注意是暫時丟棄 以減少神經元之間的依賴性,從而提高模型的泛化能力。dropout類似ensemble方法 組合多個模型,以獲得更好的效果,使整合的模型具有...