欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > PyTorch 中池化层MaxPool2d

PyTorch 中池化层MaxPool2d

2025/4/29 8:57:34 来源:https://blog.csdn.net/byxdaz/article/details/146938644  浏览:    关键词:PyTorch 中池化层MaxPool2d

在 PyTorch 中,池化层(Pooling Layer)是卷积神经网络(CNN)中的重要组成部分,主要用于降维(减少计算量)特征提取(增强平移不变性)。PyTorch 提供了多种池化操作,包括最大池化、平均池化、自适应池化等。以下是详细说明:

1. 最大池化(Max Pooling)

作用:提取局部区域的最大值,保留最显著的特征。
常用场景:图像分类、目标检测等。

(1) 二维最大池化(nn.MaxPool2d

import torch.nn as nn# 定义一个 2x2 的最大池化层,步长 stride=2
max_pool = nn.MaxPool2d(kernel_size=2,  # 池化窗口大小(可以是 int 或 tuple,如 (2,2))stride=2,       # 步长(默认等于 kernel_size)padding=0,      # 填充(默认 0)dilation=1,     # 空洞池化(默认 1)return_indices=False  # 是否返回最大值的位置(用于 MaxUnpool2d)
)# 输入张量 (batch_size=1, channels=1, height=4, width=4)
x = torch.tensor([[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]
]], dtype=torch.float32).unsqueeze(0)  # shape: [1, 1, 4, 4]output = max_pool(x)
print(output)

输出

tensor([[[[ 6.,  8.],[14., 16.]]]])

计算过程

  • 池化窗口 2x2,步长 2,无填充。

  • 输出尺寸计算:

(2) 一维最大池化(nn.MaxPool1d

适用于时序数据(如 NLP、语音):

max_pool_1d = nn.MaxPool1d(kernel_size=2, stride=2)
x = torch.tensor([[[1, 2, 3, 4, 5, 6]]], dtype=torch.float32)  # shape: [1, 1, 6]
output = max_pool_1d(x)  # shape: [1, 1, 3]
print(output)  # tensor([[[2., 4., 6.]]])

 

2. 平均池化(Average Pooling)

作用:计算局部区域的平均值,适用于平滑特征。
常用场景:图像分类、语义分割等。

(1) 二维平均池化(nn.AvgPool2d

avg_pool = nn.AvgPool2d(kernel_size=2, stride=2)
x = torch.tensor([[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]
]], dtype=torch.float32).unsqueeze(0)  # shape: [1, 1, 4, 4]output = avg_pool(x)
print(output)

输出

tensor([[[[ 3.5,  5.5],[11.5, 13.5]]]])

计算过程

  • 每个 2x2 窗口取平均值:

(2) 全局平均池化(Global Average Pooling, nn.AdaptiveAvgPool2d

常用于 CNN 最后一层,代替全连接层:

global_avg_pool = nn.AdaptiveAvgPool2d((1, 1))  # 输出固定为 1x1
x = torch.randn(1, 3, 32, 32)  # 假设输入是 32x32 的 RGB 图像
output = global_avg_pool(x)  # shape: [1, 3, 1, 1]

 

3. 其他池化操作

(1) 自适应池化(Adaptive Pooling)

作用:自动调整输出尺寸,适用于输入尺寸不固定的情况。

# 自适应最大池化,输出尺寸固定为 3x3
adaptive_max_pool = nn.AdaptiveMaxPool2d((3, 3))
x = torch.randn(1, 3, 128, 128)  # 任意输入尺寸
output = adaptive_max_pool(x)  # shape: [1, 3, 3, 3]

(2) 分数池化(Fractional Pooling)

PyTorch 不直接支持,但可通过 nn.functional.interpolate 实现类似效果。

4. 池化层 vs 卷积层

特性池化层 (Pooling)卷积层 (Convolution)
作用降维、增强平移不变性特征提取
可学习参数有(权重和偏置)
计算方式取最大值/平均值线性变换 + 非线性激活
输出尺寸通常比输入小可能比输入大(带 padding)

 

5. 池化层的典型应用

class CNN(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)self.pool1 = nn.MaxPool2d(2, 2)  # 降维 2 倍self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)self.pool2 = nn.AdaptiveAvgPool2d((1, 1))  # 全局平均池化def forward(self, x):x = F.relu(self.conv1(x))x = self.pool1(x)  # [B, 16, H/2, W/2]x = F.relu(self.conv2(x))x = self.pool2(x)  # [B, 32, 1, 1]return x

 

6. 总结

  • 最大池化(MaxPool2d:提取最显著特征,适用于分类任务。

  • 平均池化(AvgPool2d:平滑特征,适用于回归或语义分割。

  • 自适应池化(AdaptiveAvgPool2d:适用于输入尺寸不固定的情况。

  • 全局平均池化(GAP):常用于 CNN 最后一层,减少参数量。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词