结论: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,