深度学习-一篇入门

【模型】一篇入门之-CNN的池化运算

作者 : 老饼 发表日期 : 2024-01-18 11:22:38 更新日期 : 2024-11-01 22:43:57
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com



池化运算是CNN神经网络的核心运算之一,它主要在CNN中起着对FeatureMap降维的作用

本文讲解CNN的池化运算的计算过程,以及2x2池化层的意义,并展示池化运算的代码实现

通过本文,可以快速了解CNN中的池化运算是什么、有什么用,以及如何使用代码实现池化运算





    01. CNN的池化运算是什么    




本节讲解CNN的池化运算是什么,以及具体计算例子




    CNN的池化运算是什么    


什么是池化运算
池化运算是指通过一个池化窗口,对输入进行逐块扫描,每次将窗口的元素合并为一个元素
 CNN的池化运算是什么
如图所示,通过一个窗口逐步从左到右,从上到下进行扫描,每次把窗口元素合并为一
 其中,窗口的大小、移动的步幅、对输入的填充都是所需设置的参数
均值池化与最大池化
当每次对窗口元素取均值时,则称为均值池化,当取最大值时,则称为最大池化如下:
 
即,均值池化:窗口元素合并时对所有元素求平均   
     最大值池化:窗口元素合并时对所有元素求最大值 





     池化运算-例子解说    


下面以以填充为1、步幅为1、池化窗口为2x2的最大池化为例,其计算如下:
 池化运算-例子解说
 其中,填充1代表对输入周边各填充1个元素,步幅则是池化窗口的移动步幅







    02. 什么是2×2池化    




本节讲解CNN中的2x2池化运算及其意义




    2x2池化层及其意义    


在池化运算中,最常用的2×2池化,即:池化窗口大小为2×2,步幅为2,无填充
2×2池化是最常用的池化操作,目的就是无参地将输入进行降维,使得输入的高、宽都减半
 2x2池化层及其意义 
如图所示,2×2池化就相当于将输入按2×2的大小进行合并
为什么池化窗口大小为2:
将池化窗口设为2,主要是降维是一种有损失的信息压缩,不希望信息损失过快
如果需要继续降维,则先进行卷积操作,交换象素之间的信息后,再进一步池化压缩
 如果输入不是偶数怎么办:
假设列数为奇数,那么最后一列将被池化所忽略,所以在CNN神经网络的设计中,尽量保障在池化前的高和宽都是偶数







     03. 池化运算-代码实现     




本节展示池化运算的具体代码实现




     池化运算的代码实现    


在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 





联系老饼