本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com
池化层是CNN神经网络的核心层之一,它主要用于FeatureMap的降维
本文讲解CNN的池化层是如何计算的,以及常用的2x2池化层的意义
本节讲解什么是CNN的池化层
CNN的池化层
什么是池化层
池化层是通过一个池化窗口,对输入进行逐块扫描,每次将窗口的元素合并为一个元素
其中,窗口的大小、移动的步幅、对输入的填充都是所需设置的参数
常用的池化层
根据窗口元素合并时所使用的运算的不同,分别诞生了不同的池化层
常用的池化层有:均值池化、最大值池化,具体示例如下:
👉1.均值池化层:窗口元素合并时对所有元素求平均
👉2.最大值池化层:窗口元素合并时对所有元素求最大值
池化计算例子
下面以以填充为1、步幅为1、池化窗口为2x2的最大池化为例,其计算如下:
以下是使用pytorch实现本例最大值池化的代码
# 本例展示最大值池化计算
# 本代码来自《老饼讲解-深度学习》www.bbbdata.com
import torch
import numpy as np
data = np.array([[1, 3,2,1],[3, 5,2,6],[2,1,3,4]]) # 生成输入数据
x = torch.from_numpy(data).float().unsqueeze(0) # 转换为tensor
pool = torch.nn.MaxPool2d(2 ,stride= 1,padding=1) # 初始化最大值池化
out = pool(x) # 对输入进行池化
print(out) # 打印结果
本节讲解CNN中的2x2池化层及其意义
2x2池化层及其意义
虽然池化允许设置不同的窗口大小、步幅和填充,但最常用的参数基本如下:
窗口大小为2×2,步幅为2,无填充,这样就是将输入按2×2的大小进行合并
可以看到,这样的池化将FeatureMap的高和宽都缩小2倍,
这样的池化是最正统的池化操作,目的就是无参地将FeatureMap进行降维
可以认为这样的配置是狭义上的池化,而上述"设置不同窗口大小、步幅"的池化是广义池化操作
为什么池化窗口大小为2?
将池化窗口设为2主要是降维是一种有损失的信息压缩,不希望信息损失过快
如果需要继续降维,则先进行卷积操作,交换象素之间的信息后,再进一步池化压缩
如果输入不是偶数怎么办?
假设列数为奇数,那么最后一列将被池化所忽略
所以在网络的设计中,尽量保障在池化前FeatureMap的高和宽都是偶数
好了,池化层的介绍就到这里了~
End