本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com
池化运算是CNN神经网络的核心运算之一,它主要在CNN中起着对FeatureMap降维的作用
本文讲解CNN的池化运算的计算过程,以及2x2池化层的意义,并展示池化运算的代码实现
通过本文,可以快速了解CNN中的池化运算是什么、有什么用,以及如何使用代码实现池化运算
本节讲解CNN的池化运算是什么,以及具体计算例子
CNN的池化运算是什么
什么是池化运算
池化运算是指通过一个池化窗口,对输入进行逐块扫描,每次将窗口的元素合并为一个元素
如图所示,通过一个窗口逐步从左到右,从上到下进行扫描,每次把窗口元素合并为一
其中,窗口的大小、移动的步幅、对输入的填充都是所需设置的参数
均值池化与最大池化
当每次对窗口元素取均值时,则称为均值池化,当取最大值时,则称为最大池化如下:
即,均值池化:窗口元素合并时对所有元素求平均
最大值池化:窗口元素合并时对所有元素求最大值
池化运算-例子解说
下面以以填充为1、步幅为1、池化窗口为2x2的最大池化为例,其计算如下:
其中,填充1代表对输入周边各填充1个元素,步幅则是池化窗口的移动步幅
本节讲解CNN中的2x2池化运算及其意义
2x2池化层及其意义
在池化运算中,最常用的2×2池化,即:池化窗口大小为2×2,步幅为2,无填充
2×2池化是最常用的池化操作,目的就是无参地将输入进行降维,使得输入的高、宽都减半
如图所示,2×2池化就相当于将输入按2×2的大小进行合并
为什么池化窗口大小为2:
将池化窗口设为2,主要是降维是一种有损失的信息压缩,不希望信息损失过快
如果需要继续降维,则先进行卷积操作,交换象素之间的信息后,再进一步池化压缩
如果输入不是偶数怎么办:
假设列数为奇数,那么最后一列将被池化所忽略,所以在CNN神经网络的设计中,尽量保障在池化前的高和宽都是偶数
本节展示池化运算的具体代码实现
池化运算的代码实现
在pytorch中,使用AvgPool2d实现均值池化,使用MaxPool2d实现最大值池化
以最大值池化为例,具体使用代码如下
# 本例展示最大值池化计算
# 本代码来自《老饼讲解-深度学习》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) # 打印结果
好了,池化层的介绍就到这里了~
End