pytorch学习笔记:Dropout层之torch.nn.Dropout

Dropout简单介绍

什么是Dropout?

在训练神经网络时,为了解决过拟合问题而随机丢弃一部分元素的方法。

这已被证明是一种用于正则化和防止神经元共同适应的有效技术。
出自论文:[ Improving neural networks by preventing co-adaptation of feature detectors ]

为什么有效?

过拟合有很多原因,对于神经网络模型,往往会因为参数量很大,但是数据量很小,导致过拟合。最终的表现就是在训练数据集上精度很高,但是在测试集上效果很差。
通过随机丢弃一部分元素,有效抑制这种类型的过拟合,作者称为防止了co-adaptation

具体原理请参见原论文。

使用说明(来自Pytorch官方文档)

在神经网络训练过程中,使用来自伯努利分布的样本以概率 p 将输入张量的一些元素随机归零。每个通道将在每次前馈(forward)时独立归零。

在概率论和统计学中,以瑞士数学家雅各布·伯努利(Jacob Bernoulli)命名的伯努利分布是随机变量的离散概率分布,其取值为1的概率为p,值为0的概率为q=1-p。

此外,训练期间,输出按 1 1 − p \frac{1}{1-p} 1p1的系数进行缩放。
参数

•p ——元素归零的概率。默认值:0.5
•inplace——如果设置为“真”,将原地执行此操作。默认值:False

形状
•输入:输入可以是任何形状
•输出:输出与输入的形状相同

举例

m = nn.Dropout(p=0.2)
input = torch.randn(20, 16)
output = m(input)

>>> input[0]
tensor([ 0.5912,  1.2004,  1.3565, -0.0842, -0.8571,  2.0991, -1.3650, -2.0478,
         0.5515, -0.3978, -0.0024, -1.1846, -0.7232, -0.1319,  1.7912, -1.6392])

>>> output[0]
tensor([ 0.7390,  0.0000,  1.6956, -0.1052, -0.0000,  2.6239, -1.7062, -2.5598,
         0.0000, -0.0000, -0.0030, -1.4808, -0.9039, -0.0000,  2.2391, -2.0490])

# 注意最开始选择了p = 0.2,output进行了缩放,手动计算一下
>>> round(0.5912 * (1 / (1 - 0.2)), 4)
0.739

# 和系统计算的结果一致。

小结

简单介绍了Dropout的原理和torch.nn.Dropout层使用方法。

你可能感兴趣的:(深度学习,pytorch,深度学习)