CNN-卷积神经网络

【详解】CNN的池化计算详解

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



池化层是CNN神经网络的核心层之一,它主要用于FeatureMap的降维

本文讲解CNN的池化层是如何计算的,以及常用的2x2池化层的意义





    01. CNN的池化层    



本节讲解什么是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)                                           # 打印结果





    02. CNN的常用池化层及意义    



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



    2x2池化层及其意义    


虽然池化允许设置不同的窗口大小、步幅和填充,但最常用的参数基本如下:
窗口大小为2×2,步幅为2,无填充,这样就是将输入按2×2的大小进行合并
  
 可以看到,这样的池化将FeatureMap的高和宽都缩小2倍,
这样的池化是最正统的池化操作,目的就是无参地将FeatureMap进行降维
 可以认为这样的配置是狭义上的池化,而上述"设置不同窗口大小、步幅"的池化是广义池化操作
为什么池化窗口大小为2?
将池化窗口设为2主要是降维是一种有损失的信息压缩,不希望信息损失过快
如果需要继续降维,则先进行卷积操作,交换象素之间的信息后,再进一步池化压缩
如果输入不是偶数怎么办?
假设列数为奇数,那么最后一列将被池化所忽略
所以在网络的设计中,尽量保障在池化前FeatureMap的高和宽都是偶数




好了,池化层的介绍就到这里了~







 End 





联系老饼