池化层的基本操作

最近将以前所学的池化层方面知识复习一下

池化层 pooling Layers 是为了压缩数据和参数的量,就是压缩图像缩小图像尺寸,仍保留图像最重要的特征

我对于池化层的学习,是从B站上一个up主学习的 神经网络-最大池化的使用_哔哩哔哩_bilibili

在pytorch框架中,有三种常用的池化层: nn.MaxPool2d、nn.MaxUnpool2d、nn.AvgPool2d

nn.MaxPool2d最大池化层,对二维信号(图像)进行最大值池化,多用于下采样,是为了保留输入图像的的特征,同时把数据量减小,这样训练更快,数据量更小。 例如,有一个kernel_size=3的池化核,用这个池化核去找出图像对应9个位置中的最大值。

nn.MaxUnpool2d 与最大池化层相反的效果,对二维信号(图像)进行最大值池化上采样,多用于上采样,当做上采样的时候把最大值还原到其对应的位置,然后其余的位置补0,这样可以最大限度的还原信息。

nn.AvgPool2d 二维平均池化层 对二维信号(图像)进行平均值池化 输入和输出的特征层数目不变,特征图大小改变。 nn.AvgPool2d(2, 2)和nn.MaxPool2d(2, 2)一样是图像长宽缩小为原来的一半,即图像大小为原来的1/4。 MaxUnpool2d和AvgPool2d的差别:最大池化的亮度会稍微亮一些,毕竟它都是取的最大值,而平均池化是取平均值。

基本参数这三个池化层略有不同,以MaxPool2d为例:

image.png

kernel_size在卷积层中是卷积核的大小,在池化层中是池化核的大小,其实就是一个窗口大小;

stride是步长(步幅),与卷积层不同,池化层的步长默认是kernel_size的大小(卷积层默认是1);

dilation是控制池化核元素之间的距离,默认是1,即使dilation>=2,但是采样的数量不会增加,例如kernel_size=3,那就是从9个中取最大值,不管dilation是不是把空间视野扩大了;ceil_mode: 尺寸向上取整,默认为False,一般不变;padding在图像四周填充的数量;return_indices:记录池化像素索引。

image.png

最大池化层的计算公式和卷积是一致的, 例如,32@32×32->32@16×16,通道不变,宽高变成16, 假如使用一个2×2的池化核;

16=(32+2p-1*(2-1)-1)/s+1->15s=30+2p

if s=1,p<0,不行;

if s=2,p=0,可以;所以使用 MaxPool2d(kernel_size=2, stride=2, padding=0, ceil_mode=False)就可以使图像缩小一半尺寸;

例如

# 300,300,64 -> 150,150,64 self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=0, ceil_mode=True)

使用一个3×3的池化核,64@300×300->64@150×150,通道不变,宽高缩小一半;

150=(300+2p-1*(3-1)-1)/s+1->149=(297+2p)/s

if s=1,p<0,不行; if s=2,p=0时,(297+0)/2=148.5=149(池化向上取整)

再例如,24->13,假如使用一个3×3的池化核;

13=(24+2p-1*(3-1)-1)/s+1->12=(21+2p)/s

if s=1,p<0,不行;

if s=2,p=1时,(21+2)/2=11.5->12可以;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值