pytorch 中nn.Dropout的使用說明
看代碼吧~
Class USeDropout(nn.Module): def __init__(self): super(DropoutFC, self).__init__() self.fc = nn.Linear(100,20) self.dropout = nn.Dropout(p=0.5) def forward(self, input): out = self.fc(input) out = self.dropout(out) return out Net = USeDropout() Net.train()
示例代碼如上,直接調用nn.Dropout即可,但是註意在調用時要將模型參數傳入。
補充:Pytorch的nn.Dropout運行穩定性測試
結論:
Pytorch的nn.Dropout在每次被調用時dropout掉的參數都不一樣,即使是同一次forward也不同。
如果模型裡多次使用的dropout的dropout rate大小相同,用同一個dropout層即可。
如代碼所示:
import torch import torch.nn as nn class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() self.dropout_1 = nn.Dropout(0.5) self.dropout_2 = nn.Dropout(0.5) def forward(self, input): # print(input) drop_1 = self.dropout_1(input) print(drop_1) drop_1 = self.dropout_1(input) print(drop_1) drop_2 = self.dropout_2(input) print(drop_2) if __name__ == '__main__': i = torch.rand((5, 5)) m = MyModel() m.forward(i)
結果如下:
*\python.exe */model.py
tensor([[0.0000, 0.0914, 0.0000, 1.4095, 0.0000],
[0.0000, 0.0000, 0.1726, 1.3800, 0.0000],
[1.7651, 0.0000, 0.0000, 0.9421, 1.5603],
[1.0510, 1.7290, 0.0000, 0.0000, 0.8565],
[0.0000, 0.0000, 0.0000, 0.0000, 0.0000]])
tensor([[0.0000, 0.0000, 0.4722, 1.4095, 0.0000],
[0.0416, 0.0000, 0.1726, 1.3800, 1.3193],
[0.0000, 0.3401, 0.6550, 0.0000, 0.0000],
[1.0510, 1.7290, 1.5515, 0.0000, 0.0000],
[0.6388, 0.0000, 0.0000, 1.0122, 0.0000]])
tensor([[0.0000, 0.0000, 0.4722, 0.0000, 1.2689],
[0.0416, 0.0000, 0.0000, 1.3800, 0.0000],
[0.0000, 0.0000, 0.6550, 0.0000, 1.5603],
[0.0000, 0.0000, 1.5515, 1.4596, 0.0000],
[0.0000, 0.0000, 0.0000, 0.0000, 0.0000]])Process finished with exit code 0
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Pytorch模型中的parameter與buffer用法
- pytorch 使用半精度模型部署的操作
- Pytorch 中net.train 和 net.eval的使用說明
- PyTorch dropout設置訓練和測試模式的實現
- Pytorch中如何調用forward()函數