Dropout
动机
一个好的模型需要对输入数据的扰动鲁棒
使用有噪音的数据相等价于 Tikhonov 正则
Dropout:在层之间加入噪音
无偏差的加入噪音
对 加入噪音得到 ,希望
Dropout 对每个元素进行如下扰动:
实践中丢弃率可以尝试 这几个选项
使用 Dropout
通常将 Dropout 作用在隐藏全连接层的输出上
推理中的 Dropout
正则项只在训练中使用:他们影响模型参数的更新
在推理过程中,Dropout 直接返回输入
这样也能保证确定性的输出
总结
- Dropout 将一些输出项随机置 0 来控制模型复杂度
- 常作用在多层感知机的隐藏层输出上
- 丢弃概率是控制模型复杂度的超参数
代码实现
实现 dropout_layer
函数
该函数以dropout
的概率丢弃张量输入X
中的元素
1 | import torch |
测试dropout_layer
函数
1 | X = torch.arange(16, dtype=torch.float32).reshape((2, 8)) |
1 | tensor([[ 0., 1., 2., 3., 4., 5., 6., 7.], |
定义多层感知机
定义具有两个隐藏层的多层感知机,每个隐藏层包含 256 个单元
1 | num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784, 10, 256, 256 |
训练和测试
1 | num_epochs, lr, batch_size = 10, 0.5, 256 |
简洁实现
1 | net = nn.Sequential(nn.Flatten(), nn.Linear(784, 256), nn.ReLU(), |
对模型进行训练和测试
1 | trainer = torch.optim.SGD(net.parameters(), lr=lr) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 OE.Heart's Blog!