看了很多关于池化的文章,发现都没有谈到池化步长为元组的情况,索性自己做实验探究一番
最常见的池化,尺寸为2,步长为2,很容易理解,即把(w,h)变为(w/2,h/2),那如果是池化的尺寸为
(1, 2), 步长为(2, 1)呢?怎么理解?
首先尺寸(1,2)应该是这样的形状:
步长(2,1)这应该是两个方向的步长,纵向为2(对应第一维度),横向为1(对应第二维度)
即,如果是一个尺寸为(6,8)的图,经过MaxPool2d((1, 2), stride=(2, 1))后,尺寸应变为(3,7),
input = torch.randn(1, 1, 6, 8)
m = nn.MaxPool2d((1, 2), stride=(2, 1))
output=m(input)
output.shape
Out[30]: torch.Size([1, 1, 3, 7])
图示如下
pytorch自带的讲解如下
- Input: :math:`(N, C, H_{in}, W_{in})`
- Output: :math:`(N, C, H_{out}, W_{out})`, where
.. math::
H_{out} = \left\lfloor\frac{H_{in} + 2 * \text{padding[0]} - \text{dilation[0]}
\times (\text{kernel\_size[0]} - 1) - 1}{\text{stride[0]}} + 1\right\rfloor
.. math::
W_{out} = \left\lfloor\frac{W_{in} + 2 * \text{padding[1]} - \text{dilation[1]}
\times (\text{kernel\_size[1]} - 1) - 1}{\text{stride[1]}} + 1\right\rfloor
不过我是没太看懂。