Dropout字面意思就是“丢掉”,是为了防止神经网络出现过拟合,让隐藏层的节点在每次迭代时(包括正向和反向传播)有一定几率(keep-prob)失效。以提高模型的泛化能力,减少过拟合。
Dropout属于一种正则化技术。Dropout的probability,实践中最常用的是0.5(或0.1,0.05)
nn.Dropout(p = 0.3) #表示每个神经元有30%的可能性不被激活
Dropout一般用在全连接神经网络映射层之后,如代码的nn.Linear(20, 30)之后,防止过拟合,提高模型返回能力,由于卷积层参数较少,很少有放在卷积层后面的情况,卷积层一般使用batch norm。
Dropout不能用于测试集,只能用于训练集
import torch
from torch import nn
my_dropout = nn.Dropout(p=0.3)
input = torch.randn(4, 4)
print(input)
output = my_dropout(input)
print(output)
输出:
tensor([[-1.3763, 0.4258, -1.1728, 0.1388],
[-1.0472, 0.4615, -0.5010, 0.0132],
[ 1.3106, 0.2946, 0.0626, -0.1921],
[ 0.0733, 0.1027, -1.8069, 0.3852]])
tensor([[-0.0000, 0.6083, -0.0000, 0.0000],
[-1.4959, 0.6593, -0.0000, 0.0000],
[ 1.8723, 0.4209, 0.0000, -0.0000],
[ 0.0000, 0.1466, -2.5812, 0.5502]])
可以看到,output中有些值已经被随机置零了
而没有置零的也是除以了0.7,比如第一行第二列的0.4258,0.4258/0.7=0.6083