dropout 是一种常用的正则化技术,用于防止神经网络过拟合。pytorch 提供了 nn.dropout 层来实现这一功能。
基本用法
torch.nn.dropout(p=0.5, inplace=false)
参数说明:
- p (float): 每个元素被置为0的概率(默认0.5)
- inplace (bool): 是否原地操作(默认false)
工作原理
- 在前向传播时,dropout 会以概率
p随机将输入张量的某些元素置为0 - 未被置0的元素会被缩放为
1/(1-p)倍(为了保持训练和测试时的期望值一致) - 在评估模式(
eval())下,dropout 层不会执行任何操作
在训练时,dropout 的输出可以表示为:

其中 mm 是一个伯努利随机变量矩阵(元素为0或1),pp 是dropout概率。
在测试时,模型直接使用原始输入:

使用示例
1. 基本使用
import torch
import torch.nn as nn
# 创建dropout层,置0概率为0.3
dropout = nn.dropout(p=0.3)
# 创建一个随机输入
input = torch.randn(5, 3)
print("原始输入:\n", input)
# 训练模式下的输出
output = dropout(input)
print("\ndropout输出:\n", output)2. 在神经网络中使用
class net(nn.module):
def __init__(self):
super(net, self).__init__()
self.fc1 = nn.linear(784, 512)
self.dropout = nn.dropout(p=0.2) # 20%的dropout
self.fc2 = nn.linear(512, 10)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.dropout(x) # 应用dropout
x = self.fc2(x)
return x3. 训练和评估模式切换
model = net() # 训练模式(启用dropout) model.train() output_train = model(torch.randn(1, 784)) # 评估模式(禁用dropout) model.eval() output_eval = model(torch.randn(1, 784))
注意事项
- 训练与测试的区别:dropout 只在训练时激活,在测试/评估时自动关闭
- 概率选择:通常使用0.2-0.5之间的概率,输入层可以使用更高的概率
- 缩放因子:pytorch 自动实现了缩放(乘以1/(1-p)),无需手动处理
- 与batchnorm配合:dropout 和 batchnorm 一起使用时可能需要调整学习率
变体
pytorch 还提供了其他类型的 dropout 层:
nn.dropout1d:对1d特征图的整个通道进行dropoutnn.dropout2d:对2d特征图的整个通道进行dropoutnn.dropout3d:对3d特征图的整个通道进行dropout
这些变体在处理图像等具有空间结构的数据时特别有用。
到此这篇关于pytorch中dropout的具体用法的文章就介绍到这了,更多相关pytorch dropout内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论