torch.nn.MaxPool2d

卷积操作中 pool层是比较重要的,是提取重要信息的操作,可以去掉不重要的信息,减少计算开销。

 

class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

如果padding不是0,会在输入的每一边添加相应数目0 比如padding=1,则在每一边分别补0.

参数:

  • kernel_size(int or tuple) - max pooling的窗口大小,

  • stride(int or tuple, optional) - max pooling的窗口移动的步长。默认值是kernel_size

  • padding(int or tuple, optional) - 输入的每一条边补充0的层数

  • dilation(int or tuple, optional) – 一个控制窗口中元素步幅的参数

  • return_indices - 如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助

  • ceil_mode - 如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作

 

a = torch.randn(3,5,10)
b = nn.Maxpool2d((5,1))  # kernel = 5 步长为1
c = b(a)
c.shape


torch.size([3,1,10])

pool操作并不改变张量的通道数

 

x = t.rand(1,3,7,7)
out = nn.MaxPool2d(kernel_size=2,stride=2)
out.forward(x).shape
torch.Size([1, 3, 3, 3])

启动kernel代表的是观察角度,如下图kernel就是2*2,stride和Conv操作中一样代表每次移动的步长。

下图操作,在每次观察区域内取最大值作为采样数据进行降维操作,这样做的优点是可以使显性特征更明显,降维操作并没有更改输出和输出的channel_num

torch.nn.MaxPool2d_第1张图片

maxpool操作

pool操作还有

Avg_pool

对于Avg_pool来说,参数和Max_pool是完全相同的,主要区别就是在kernel中取的是平均值操作。


在分析resnet50网络 pytorch网络的时候

 

(maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)

也就是kernel为3 stride 2 padding 1 dilation =1 ceil_mode = False

从下图中可以看出他的输入

resnet50网络

输入的图片为 1920*1080 大小
经过第一层卷积为 

960x540

所以输入pool层的数据为

960x540

经过pooling层后的数据为

480x270

 

但是都没改变数据的通道数

等于经过pool层后 图片的大小减半了 也就是2倍的下采样



作者:乔大叶_803e
链接:https://www.jianshu.com/p/9d93a3391159
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(pytorch)