一、池化层
池化运算:对信号进行“收集” 并“总结”,类似于水池收集水资源,因而得名池化层。
- 收集:由多变少,图像的尺寸由大变小
- 总结:最大值/平均值
下面是最大值池化和平均值池化的示意图:
最大值池化就是将滑动窗口中的最大值作为最终的结果;平均值池化是将滑动窗口的平均值作为最终结果。下面看一下pytorch中提供最大值和平均值池化的函数
1、nn.Maxpool2d
nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
功能:对二维信号(图像)进行最大值池化
参数:
- kernel_size:池化核尺寸
- stride:步长
- padding:填充个数
- dilation:池化核间隔大小
- ceil_mode:尺寸向上取整
- return_indices: 记录池化像素索引
前面几个参数和卷积类似,最后一个参数常在最大值反池化的时候使用,返回的是滑动窗口中最大值所在位置的索引值,反最大值池化过程如下图所示:
左边图是4✖️4的图经过最大值池化后变为2✖️2,右边的图是反池化操作,将尺寸较小的图经过上采样变为尺寸较大的图,在反池化操作的过程中,小图中的值应该放到上采样后的图中的什么位置呢?这就需要最大值池化后的索引值,根据索引值将元素放到对应的位置,就得到了上图中最右边的图像。
下面来看一下最大值池化的效果:
# ================================= load img ==================================
path_img = os.path.join(os.path.dirname(os.path.abspath(__file__)), "lena.png")
img = Image.open(path_img).convert('RGB') # 0~255
# convert to tensor
img_transform = transforms.Compose([transforms.ToTensor()])
img_tensor = img_transform(img)
img_tensor.unsqueeze_(dim&#