现在位置: 首页 > PyTorch 教程 > 正文

PyTorch torch.nn.Dropout2d 函数

PyTorch torch.nn 参考手册 PyTorch torch.nn 参考手册


torch.nn.Dropout2d 是 PyTorch 中的二维 Dropout 模块。

它随机将整个通道置零,适合卷积层的特征图。

函数定义

torch.nn.Dropout2d(p=0.5, inplace=False)

特点

  • 按通道(channel)维度随机置零
  • 每个样本的所有通道保持一致的丢弃模式

使用示例

示例 1: 基本用法

实例

import torch
import torch.nn as nn

dropout2d = nn.Dropout2d(p=0.5)
dropout2d.train()

# 输入:batch=4,通道=8,高=16,宽=16
x = torch.ones(4, 8, 16, 16)

output = dropout2d(x)

# 统计丢弃的通道数
non_zero_channels = (output.sum(dim=(2, 3)) != 0).float()
print("非零通道比例:", non_zero_channels.mean().item())
print("期望约 0.5 的通道被保留")

示例 2: 对比 Dropout

实例

import torch
import torch.nn as nn

dropout1d = nn.Dropout(0.5)
dropout2d = nn.Dropout2d(0.5)

# 输入
x = torch.randn(2, 4, 8, 8)

# Dropout: 随机置零单个元素
out1 = dropout1d(x)
# Dropout2d: 按通道置零
out2 = dropout2d(x)

print("Dropout 形状:", out1.shape)
print("Dropout2d 形状:", out2.shape)

示例 3: 在 CNN 中使用

实例

import torch
import torch.nn as nn

# 带 Dropout2d 的 CNN
model = nn.Sequential(
    nn.Conv2d(3, 64, 3, padding=1),
    nn.BatchNorm2d(64),
    nn.ReLU(),
    nn.Dropout2d(0.3),  # 在特征图级别丢弃
    nn.Conv2d(64, 128, 3, padding=1),
    nn.BatchNorm2d(128),
    nn.ReLU(),
    nn.AdaptiveAvgPool2d(1),
    nn.Flatten(),
    nn.Linear(128, 10)
)

x = torch.randn(4, 3, 32, 32)
output = model(x)

print("输入:", x.shape, "-> 输出:", output.shape)

使用场景

  • 卷积网络: 特征图级别正则化
  • 减少通道依赖

注意:Dropout2d 在训练时按通道丢弃,评估时不起作用。


PyTorch torch.nn 参考手册 PyTorch torch.nn 参考手册