文章目录
- 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)
- 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 x
- model = Net() # 训练模式(启用dropout) model.train() output_train = model(torch.randn(1, 784)) # 评估模式(禁用dropout) model.eval() output_eval = model(torch.randn(1, 784))
目录
- 基本用法
- 参数说明:
- 工作原理
- 使用示例
- 1. 基本使用
- 2. 在神经网络中使用
- 3. 训练和评估模式切换
- 注意事项
- 变体
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 层不会执行任何操作
p 随机将输入张量的某些元素置为01/(1-p) 倍(为了保持训练和测试时的期望值一致)eval())下,Dropout 层不会执行任何操作在训练时,Dropout 的输出可以表示为:

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

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)
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 x
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内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- PyTorch使用Tricks:Dropout,R-Dropout和Multi-Sample Dropout方式
- Pytorch nn.Dropout的用法示例详解
- Python深度学习pytorch神经网络Dropout应用详解解
- Pytorch之如何dropout避免过拟合
- PyTorch dropout设置训练和测试模式的实现
- pytorch Dropout过拟合的操作
- 浅谈pytorch中的dropout的概率p
- PyTorch 实现L2正则化以及Dropout的操作
- pytorch 实现在测试的时候启用dropout
- pytorch 中nn.Dropout的使用说明