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

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 大小
经过第一层卷积为
960\times540

所以输入pool层的数据为
960\times540

经过pooling层后的数据为

480\times 270

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容