最近需要訓練一個模型,在優(yōu)化模型時用了dropout函數(shù),為了減少過擬合。
訓練的時候用dropout,測試的時候不用dropout。剛開始以為p是保留神經(jīng)元的比率,訓練設(shè)置0.5,測試設(shè)置1,loss根本沒減小過,全設(shè)置成1也是一樣的效果,后來就考慮到是不是p設(shè)置錯了。
上網(wǎng)一搜,果然是的!??!p的含義理解錯了!不是保留的,而是不保留的!
具體的代碼為:
x1是上一層網(wǎng)絡(luò)的輸出,p是需要刪除的神經(jīng)元的比例。
當p=0時,保留全部神經(jīng)元更新。當p=1時,神經(jīng)元輸出的值都為0。
補充:Pytorch--Dropout筆記
dropout常常用于抑制過擬合,pytorch也提供了很方便的函數(shù)。但是經(jīng)常不知道dropout的參數(shù)p是什么意思。
在TensorFlow中p叫做keep_prob,就一直以為pytorch中的p應(yīng)該就是保留節(jié)點數(shù)的比例,但是實驗結(jié)果發(fā)現(xiàn)反了,實際上表示的是不保留節(jié)點數(shù)的比例。
看下面的例子:
a = torch.randn(10,1)
>>> tensor([[ 0.0684],
[-0.2395],
[ 0.0785],
[-0.3815],
[-0.6080],
[-0.1690],
[ 1.0285],
[ 1.1213],
[ 0.5261],
[ 1.1664]])
p=0.5
torch.nn.Dropout(0.5)(a)
>>> tensor([[ 0.0000],
[-0.0000],
[ 0.0000],
[-0.7631],
[-0.0000],
[-0.0000],
[ 0.0000],
[ 0.0000],
[ 1.0521],
[ 2.3328]])
p=0
torch.nn.Dropout(0)(a)
>>> tensor([[ 0.0684],
[-0.2395],
[ 0.0785],
[-0.3815],
[-0.6080],
[-0.1690],
[ 1.0285],
[ 1.1213],
[ 0.5261],
[ 1.1664]])
p=1
torch.nn.Dropout(0)(a)
>>> tensor([[0.],
[-0.],
[0.],
[-0.],
[-0.],
[-0.],
[0.],
[0.],
[0.],
[0.]])
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- pytorch 實現(xiàn)在測試的時候啟用dropout
- PyTorch 實現(xiàn)L2正則化以及Dropout的操作
- Python深度學習pytorch神經(jīng)網(wǎng)絡(luò)Dropout應(yīng)用詳解解