• 池化层返回窗口中最大或者平均值
  • 缓解卷积层对位置的敏感性
  • 同样有窗口大小、填充、步幅作为超参数

最大池化:每次输出窗口内最大值(不是求和了)

复现

导包

1
2
import torch  
from torch import nn

构建

start=0, end=16, step=1,返回一维张量,其值介于区间 [start, end],步长为 step

1
2
3
4
5
6
7
X = torch.arange(16, dtype=torch.float32).reshape((1,1,4,4))    
X

# tensor([[[[ 0., 1., 2., 3.],
# [ 4., 5., 6., 7.],
# [ 8., 9., 10., 11.],
# [12., 13., 14., 15.]]]])

3 表示是 3*3 的窗口,pytorch 种步幅和窗口大小相同,即每个窗口之间没有重叠

1
2
3
4
pool2d = nn.MaxPool2d(3)    
pool2d(X)

# tensor([[[[10.]]]])

自定义填充和步长

padding=1 表示四周都填上一行(一列), stride=2 表示步幅为 2

1
2
3
4
5
pool2d = nn.MaxPool2d(3, padding=1, stride=2)     
pool2d(X)

# tensor([[[[ 5., 7.],
# [13., 15.]]]])

自定义窗口大小和步长

1
2
3
4
5
6
pool2d = nn.MaxPool2d((2,3),padding=(1,1),stride=(2,3))  
pool2d(X)

# tensor([[[[ 1., 3.],
# [ 9., 11.],
# [13., 15.]]]])

多维度池化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
X = torch.arange(16, dtype=torch.float32).reshape((1,1,4,4))  

X = torch.cat((X,X+1),1) # 1表示X和X+1横着拼
X

# tensor([[[[ 0., 1., 2., 3.],
# [ 4., 5., 6., 7.],
# [ 8., 9., 10., 11.],
# [12., 13., 14., 15.]],
#
# [[ 1., 2., 3., 4.],
# [ 5., 6., 7., 8.],
# [ 9., 10., 11., 12.],
# [13., 14., 15., 16.]]]])
1
2
3
4
5
6
7
8
pool2d = nn.MaxPool2d(3,padding=1,stride=2)  
pool2d(X)

# tensor([[[[ 5., 7.],
# [13., 15.]],
#
# [[ 6., 8.],
# [14., 16.]]]])

相关链接

bilibili