PyTorch学习笔记之二:池化层
一、池化层
池化层(Pooling Layer):主要用来去掉次要特征,保留主要特征,降低数据维度,减少计算量。
池化层的类型主要包括:
- 最大值池化(Max Pooling)
- 平均值池化(Average Pooling)
- 自适应池化(Adaptive Pooling)
二、参数
1. 二维最大值池化层(nn.MaxPool2d)参数
最大值池化层(nn.MaxPool2d) 参数详解:
参数详解
kernel_size:池化层移动窗口大小;stride:池化层移动窗口步幅;padding:填充大小;dilation:膨胀大小;return_indices:索引;ceil_mode:模式;
2. 举个例子
- 对一个张量做一次最大池化:
import torch
import torch.nn as nn
# 创建一个二维最大池化层,池化窗口大小为2x2,步幅为2x2
maxpool2d = nn.MaxPool2d(
kernel_size=2, # 池化层移动窗口大小
stride=2, # 池化层移动窗口步幅
#padding=0, # 填充大小
#dilation=1, # 膨胀大小
#return_indices=False, # 是否返回最大池化元素的索引
#ceil_mode=False, # 是否使用向上取整的方式计算输出大小
)
print("-"*100)
print(f'最大值池化参数: {maxpool2d}') # 打印池化层信息
# 输入一个[1, 1, 4, 4]张量,其中1表示batch_size,1表示通道数,4x4表示输入图像的大小
input = torch.tensor([[[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]]]])
# 进行池化操作
output = maxpool2d(input) # 池化操作
print("-"*100)
print(f'input shape: {input.shape}') # 打印输入数据的形状
print(f'output shape: {output.shape}') # 打印输出数据的形状
print("-"*100)
print(f'input: {input}') # 打印输入数据
print(f'output: {output}') # 打印输出数据
print("-"*100)
- 打印输出结果:
----------------------------------------------------------------------------------------------------
最大值池化参数: MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
----------------------------------------------------------------------------------------------------
input shape: torch.Size([1, 1, 4, 4])
output shape: torch.Size([1, 1, 2, 2])
----------------------------------------------------------------------------------------------------
input: tensor([[[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]]]])
output: tensor([[[[ 6, 8],
[14, 16]]]])
----------------------------------------------------------------------------------------------------
3. 代码解释
- 输入一个是
(1,1,4,4)的张量,经过nn.MaxPool2d(2, 2)最大值池化后,输出变成一个(1,1,2,2)的张量。

由于池化层移动窗口大小:
kernel_size=2,池化层移动窗口步幅:stride=2,然后去取最大值,简化数据,保留数据主要特征,减少数据计算量:
- 左上:
max(1, 2, 5, 6) => 6- 右上:
max(3, 4, 7, 8) => 8- 左下:
max(9, 10, 13, 14) => 14- 右下:
max(11, 12, 15, 16) => 16
- 动画展示如下:

4. Shape计算公式
- 输出图像大小,PyTorch官方提供了计算方法:

- 其中:
- 池化层移动窗口大小:
kernel_size=2; - 池化层移动窗口步幅:
stride=2; - 填充大小:
padding=0; - 膨胀大小:
dilation=1;
- 池化层移动窗口大小:
- 代入:
- Hout = ⌊ H i n − k e r n e l _ s i z e [ 0 ] s t r i d e [ 0 ] + 1 ⌋ \left \lfloor \frac{H_{in} - kernel\_size[0]}{stride[0]} +1\right \rfloor ⌊stride[0]Hin−kernel_size[0]+1⌋ = ⌊ 4 − 2 2 + 1 ⌋ \left \lfloor \frac{4 - 2}{2} +1\right \rfloor ⌊24−2+1⌋ = 2
- Wout = ⌊ W i n − k e r n e l _ s i z e [ 1 ] s t r i d e [ 1 ] + 1 ⌋ \left \lfloor \frac{W_{in} - kernel\_size[1]}{stride[1]} +1\right \rfloor ⌊stride[1]Win−kernel_size[1]+1⌋ = ⌊ 4 − 2 2 + 1 ⌋ \left \lfloor \frac{4 - 2}{2} +1\right \rfloor ⌊24−2+1⌋ = 2
三、总结
池化层一般用在卷积层提取特征之后,去掉图像次要特征,保留图像主要特征,降低数据维度,减少数据计算量。
四、参考
- 链接: PyTorch: torch.nn.MaxPool2d
- 【附】池化层
MaxPool2d参数

- 【附】池化层Shape计算公式

1万+

被折叠的 条评论
为什么被折叠?



