方法 | 注释 |
---|---|
nn.Dropout | 在训练过程中,使用来自伯努利分布的样本,以概率p随机归零输入张量的一些元素。 |
nn.Dropout1d | 随机归零整个通道(一个通道是一个1D特征映射,例如,批处理输入中的第i个样本的第j个通道是一个1D张量 input[i,j] |
nn.Dropout2d | 随机地将整个通道归零(通道是2D特征图,例如,分批输入中的第i个样本的第j个通道是2D张量input[i,j]。 |
nn.Dropout3d | 随机地将整个通道归零(通道是3D特征图,例如,分批输入中的第i个样本的第j个通道是3D张量input[i,j])。 |
nn.AlphaDropout | 在输入上应用Alpha Dropout。 |
nn.FeatureAlphaDropout | 随机屏蔽整个通道(通道是一个特征映射。 |
在训练过程中,使用来自伯努利分布的样本,以概率p随机归零输入张量的一些元素。每个信道将在每次前转呼叫中独立归零。
这已被证明是一种有效的技术,用于正则化和防止神经元的自适应,如论文所述Improving neural networks by preventing co-adaptation of feature detectors .
。
>>> m = nn.Dropout(p=0.2)
>>> input = torch.randn(20, 16)
>>> output = m(input)
class SelfDropout(nn.Module):
def __init__(self, p: float = 0.5, inplace: bool = False) -> None:
super(SelfDropout, self).__init__()
if p < 0 or p > 1:
raise ValueError("dropout probability has to be between 0 and 1, "
"but got {}".format(p))
self.p = p
self.inplace = inplace
# 下面是自定义的内容
# nn.Parameter将变量变成模型的参数,不仅可以参加反向传播的参数更新,还能够在model.cuda()时一同被送到GPU中
self.dropout_mask = nn.Parameter(torch.zeros(4096))
self.dropout_mask.requires_grad = True
# 能够打印用户定制化的额外信息,为重载函数
def extra_repr(self) -> str:
return 'p={}, inplace={}'.format(self.p, self.inplace)
def forward(self, input: Tensor) -> Tensor:
if self.training:
print(self.dropout_mask)
return input * self.dropout_mask
else:
return input * self.dropout_mask
随机地将整个通道归零(通道是1D特征图,例如,分批输入中的第i个样本的第j个通道是一维张量输入[i,j])。使用来自伯努利分布的样本,每个信道将在概率为p的每个前向呼叫上独立地归零。
>>> m = nn.Dropout1d(p=0.2)
>>> input = torch.randn(20, 16, 32)
>>> output = m(input)
随机地将整个通道归零(通道是1D特征图,例如,分批输入中的第i个样本的第j个通道是一维张量input[i,j])。使用来自伯努利分布的样本,每个信道将在概率为p的每个前向呼叫上独立地归零。
通常输入来自nn.Conv2d
模块。
如论文Efficient Object Localization Using Convolutional Networks中所述,如果特征图中的相邻像素是强相关的(就像早期卷积层中的正常情况一样),那么i.i.d.丢弃将不会使激活正则化,否则只会导致有效的学习率降低。
在这种情况下,nn.Dropout2d()
将有助于提高特性映射之间的独立性,应该使用它。
>>> m = nn.Dropout2d(p=0.2)
>>> input = torch.randn(20, 16, 32, 32)
>>> output = m(input)
>>> m = nn.Dropout3d(p=0.2)
>>> input = torch.randn(20, 16, 4, 32, 32)
>>> output = m(input)
将Alpha Dropout应用于输入。
Alpha衰减是一种保持自规范化特性的衰减类型。对于具有零平均值和单位标准差的输入,Alpha Dropout的输出保持输入的原始平均值和标准差。Alpha Dropout与SELU激活功能齐头并进,确保输出具有零平均值和单位标准偏差。
在训练过程中,它使用来自伯努利分布的样本,以概率p随机屏蔽输入张量的一些元素。要屏蔽的元素在每次前向调用时都是随机的,并进行缩放和移位以保持零均值和单位标准差。
在评估过程中,模块简单地计算一个身份函数。
更多细节可以在论文 Self-Normalizing Neural Networks .中找到。
>>> m = nn.AlphaDropout(p=0.2)
>>> input = torch.randn(20, 16)
>>> output = m(input)
随机屏蔽整个通道(通道是特征图,例如,批输入中第i个样本的第j个通道是输入张量的张量输入[i,j])。与在常规Dropout中那样将激活设置为零不同,激活被设置为SELU激活函数的负饱和值。更多细节可以在论文Self-Normalizing Neural Networks 中找到。
在每次前向调用中,每个元素将被独立地屏蔽,使用来自伯努利分布的样本,概率为p。在每次前向调用时,将被掩盖的元素随机化,并缩放和移位以保持平均值和单位方差为零。
通常输入来自nn.AlphaDropout
模块。
如论文Efficient Object Localization Using Convolutional Networks中所述,如果特征图中的相邻像素是强相关的(就像早期卷积层中的正常情况一样),那么i.i.d.丢弃将不会使激活正则化,否则只会导致有效的学习率降低。
>>> m = nn.FeatureAlphaDropout(p=0.2)
>>> input = torch.randn(20, 16, 4, 32, 32)
>>> output = m(input)