池化层(Pooling layers)

除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,我们来看一下。

先举一个池化层的例子,然后我们再讨论池化层的必要性。

假如输入是一个4×4矩阵,用到的池化类型是最大池化(max pooling)。

执行最大池化的树池是一个2×2矩阵。

执行过程非常简单,把4×4的输入拆分成不同的区域,我把这个区域用不同颜色来标记。

对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。
左上区域的最大值是9,右上区域的最大元素值是2,左下区域的最大值是6,右下区域的最大值是3。

为了计算出右侧这4个元素值,我们需要对输入矩阵的2×2区域做最大值运算。

这就像是应用了一个规模为2的过滤器,因为我们选用的是2×2区域,步幅是2,这些就是最大池化的超参数。

因为我们使用的过滤器为2×2,最后输出是9。

然后向右移动2个步幅,计算出最大值2。

然后是第二行,向下移动2步得到最大值6。

最后向右移动3步,得到最大值3。

这是一个2×2矩阵,即f=2,步幅是2,即s=2。

这是对最大池化功能的直观理解,你可以把这个4×4区域看作是某些特征的集合,也就是神经网络中某一层的非激活值集合。



数字大意味着可能探测到了某些特定的特征,左上象限具有的特征可能是一个垂直边缘,一只眼睛,或是大家害怕遇到的CAP特征。

显然左上象限中存在这个特征,这个特征可能是一只猫眼探测器。

然而,右上象限并不存在这个特征。

最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。

所以最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。

如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。

必须承认,人们使用最大池化的主要原因是此方法在很多实验中效果都很好。

尽管刚刚描述的直观理解经常被引用,不知大家是否完全理解它的真正原因,不知大家是否理解最大池化效率很高的真正原因。

其中一个有意思的特点就是,它有一组超参数,但并没有参数需要学习。

实际上,梯度下降没有什么可学的,一旦确定了f和s,它就是一个固定运算,梯度下降无需改变任何值。




我们来看一个有若干个超级参数的示例,输入是一个5×5的矩阵。

我们采用最大池化法,它的过滤器参数为3×3,即f=3,步幅为1,s=1,输出矩阵是3×3。

之前讲的计算卷积层输出大小的公式同样适用于最大池化,
即(n+2p-f)/s+1,这个公式也可以计算最大池化的输出大小。

此例是计算3×3输出的每个元素,我们看左上角这些元素,注意这是一个3×3区域,因为有3个过滤器,取最大值9。

然后移动一个元素,因为步幅是1,蓝色区域的最大值是9。

继续向右移动,蓝色区域的最大值是5。

然后移到下一行,因为步幅是1,我们只向下移动一个格,所以该区域的最大值是9。

这个区域也是9。

这两个区域的最大值都是5。

最后这三个区域的最大值分别为8,6和9。

超参数f=3,s=1,最终输出如图所示。

以上就是一个二维输入的最大池化的演示,如果输入是三维的,那么输出也是三维的。

例如,输入是5×5×2,那么输出是3×3×2。

计算最大池化的方法就是分别对每个通道执行刚刚的计算过程。

如上图所示,第一个通道依然保持不变。

对于第二个通道,我刚才画在下面的,在这个层做同样的计算,得到第二个通道的输出。

一般来说,如果输入是5×5×n_c,输出就是3×3×n_c,n_c个通道中每个通道都单独执行最大池化计算,以上就是最大池化算法。

func MaxPooling(data [][]float64, pool_size int, step int)([][]float64){result := [][]float64{}for i := 0; i < len(data) - pool_size + 1; i += step{temp := []float64{}for j := 0; j < len(data[0]) - pool_size + 1; j += step{var max_num float64 = 0for cur_i := i; cur_i < i + pool_size; cur_i++{for cur_j :=j; cur_j < j + pool_size; cur_j++{max_num = math.Max(max_num, data[cur_i][cur_j])}}temp = append(temp, max_num)}result = append(result, temp)}return result
}

卷积神经网络——池化层学习——最大池化相关推荐

  1. 转:卷积神经网络_(1)卷积层和池化层学习

    博主总结的很好,学习中.转载:http://www.cnblogs.com/zf-blog/p/6075286.htm 卷积神经网络_(1)卷积层和池化层学习 卷积神经网络(CNN)由输入层.卷积层. ...

  2. cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记

    CNN中的池化层 首先,池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性. 什么意思? 比如在图像边缘检测问题中,实际图像里,我们的目标物体不会总出现在固定位置,即使我们连续拍摄同一个 ...

  3. (pytorch-深度学习系列)CNN中的池化层-学习笔记

    CNN中的池化层 首先,池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性. 什么意思? 比如在图像边缘检测问题中,实际图像里,我们的目标物体不会总出现在固定位置,即使我们连续拍摄同一个 ...

  4. 39_上下采样、MaxPool2d、AvgPool2d、ReLU案例、二维最大池化层和平均池化层、填充和步幅、多通道

    1.34.PyTorch Down/up sample (pytorch上下采样) 1.34.1. 首先介绍下采样 1.34.1.1. MaxPool2d案例 1.34.1.2. AvgPool2d案 ...

  5. 最大池化层和平均池化层

    参考链接: https://blog.csdn.net/junmuzi/article/details/53206600 https://blog.csdn.net/qq_21190081/artic ...

  6. 《基于卷积神经网络的深度迁移学习,用于燃气轮机燃烧室的故障检测》论文阅读

    目录 突出 抽象 引言 1.1动机 1.2文献综述获得的结论 1.3贡献 1.4组织 2方法 2.1燃汽轮机组故障知识共享 2.2迁移学习 2.3 基于卷积神经网络的深度迁移学习 2.4用于燃气轮机燃 ...

  7. 【深度学习入门-1】透彻理解卷积的三层含义:从“卷积”、到“图像卷积操作”、再到“卷积神经网络”的含义(学习笔记)

    一.写在前面 笔者在进行卷积神经网络入门的时候花了很多功夫,理解的也不够透彻,基础不牢,地动山摇.在查阅了很多资料后,发现了大佬up"王木头学科学"讲的卷积神经网络的理解,茅塞顿开 ...

  8. 卷积神经网络—全连接层

    卷积神经网络-全连接层 全连接层 全连接层与卷积层 全连接层与GAP(全局平均池化层) [1] https://blog.csdn.net/Touch_Dream/article/details/79 ...

  9. 池化层:最大池化MaxPool、平均池化AvgPool、自适应池化AdaptiveMaxPool区别--基于pytorch框架

    文章目录 MaxPool2d最大池化 AvgPool2d平均池化 AdaptiveAvgPool2d自适应平均池化 池化操作的一个重要的目的就是对卷积后得到的特征进行进一步处理,池化层可以起到对数据进 ...

最新文章

  1. Yii 2 —— Model表前缀
  2. 字符串与数组的常用方法
  3. rhcs做HA时的资源释放脚本实现
  4. python将16进制字符串转换为整数_Python 16进制与字符串的转换
  5. java实现相同分数排名_java做成绩排名表,如何实现同分同名次
  6. matlab相位连续显示,matlab设计复合信号不同频率的初相位
  7. ZYNQ PS端输出无效时钟供PL使用
  8. Dnn's Event Logging API
  9. java motherfree video_Java Config 下的Spring Test方式
  10. LINUX使用消息队列的代码
  11. 【Spring-IOC】Spring中的数据校验
  12. 微软商店点下载没反应
  13. Knoll Light Factory 3.2 for Mac 完整汉化版 灯光工厂 for Mac中文版 支持PSCC2019
  14. weblogic部署war
  15. JxBrowser做爬虫时处理浏览器对话框
  16. 龙芯2F入手,点滴记录!
  17. 中标麒麟v7.0 yum源报错修改方法
  18. nvidia卸载程序失败_英伟达显卡驱动安装失败怎么办?
  19. 51单片机数字时钟套件 DIY散件
  20. l003 Driller Augmenting Fuzzing Through Selective Symbolic Execution_2016_NDSS学习笔记

热门文章

  1. 动态生成的DOM做点击事件无效
  2. JQuery 的跨域方法 可跨任意网站
  3. 【Unity3D技巧】一个简单的Unity-UI框架的实现
  4. (转)用来理解Java的8个图表
  5. 西南往事回忆录—工作点滴
  6. PHP学习:文件操作
  7. 一些DIV+CSS 命名规范
  8. 多少行数_经验丰富的程序员和其每日代码行数
  9. ajax请求获取服务器数据,jquery.ajax发布从app引擎服务器获取数据的请求
  10. MATLAB函数gensurf,matlab模糊逻辑(二)