pytorch 笔记 :实现Dropout
1 理論部分
首先說(shuō)明一點(diǎn),dropout是用來(lái)解決overfitting的,如果在訓(xùn)練集上實(shí)驗(yàn)效果就不理想,那么加了dropout也救不了。
1.1 training時(shí)的dropout
使用了Dropout之后,訓(xùn)練的時(shí)候,每個(gè)神經(jīng)元都有p的概率不向后傳遞自己的信息。
把上圖畫(huà)×的申請(qǐng)?jiān)恋?#xff08;因?yàn)檫@些神經(jīng)元不傳遞自己的信息,在本輪training中是沒(méi)有作用的),可以得到一個(gè)更“細(xì)”的神經(jīng)網(wǎng)路
但這并不代表其他的神經(jīng)元沒(méi)有作用了。對(duì)每個(gè)mini-batch,我們重新計(jì)算那些神經(jīng)元參與傳遞哪些沒(méi)有。所以最后所有的參數(shù)都會(huì)被更新的。
1.2 testing時(shí)的dropout
測(cè)試模型的時(shí)候,神經(jīng)元就都是相連的了,只不過(guò)權(quán)重值得乘以(1-p%)
從另一個(gè)視角看dropput,它相當(dāng)于把一堆共享參數(shù)的model整合起來(lái)
2? pytorch實(shí)現(xiàn)Dropout
Dropout訓(xùn)練的時(shí)候,需要聲明model.train()(不聲明也行,因?yàn)槟J(rèn)是train狀態(tài))
Dropout測(cè)試的時(shí)候,則是需要聲明model.eval()(如果不希望開(kāi)啟dropout進(jìn)行訓(xùn)練,所有的神經(jīng)元都參與前向傳播和反向傳播的話(huà),在訓(xùn)練階段開(kāi)啟前聲明model.eval()即可)
#導(dǎo)入庫(kù) import torch#神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)聲明 net=torch.nn.Sequential(torch.nn.Linear(1,16),torch.nn.Dropout(p=0.5),torch.nn.ReLU(),torch.nn.Linear(16,2))net.train() net.eval() net ''' Sequential((0): Linear(in_features=1, out_features=16, bias=True)(1): Dropout(p=0.5, inplace=False)(2): ReLU()(3): Linear(in_features=16, out_features=2, bias=True) ) '''?
總結(jié)
以上是生活随笔為你收集整理的pytorch 笔记 :实现Dropout的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pytorch笔记:搭建简易CNN
- 下一篇: 文巾解题 1046. 最后一块石头的重量