1 池化概述
1.1 什么是池化
池化层是卷积神经网络中常用的一个组件,池化层经常用在卷积层后边,通过池化来降低卷积层输出的特征向量,避免出现过拟合的情况。池化的基本思想就是对不同位置的特征进行聚合统计。池化层主要是模仿人的视觉系统对数据进行降维,用更高层次的特征表示图像。池化层一般没有参数,所以反向传播的时候,只需对输入参数求导,不需要进行权值更新。
池化操作的基本思想是将特征图划分为若干个子区域(一般为矩形),并对每个子区域进行统计汇总。池化操作的方式可以有很多种,比如最大池化(Max Pooling)、平均池化(Average Pooling)等。其中,最大池化操作会选取每个子区域内的最大值作为输出,而平均池化操作则会计算每个子区域内的平均值作为输出。
1.2 池化的作用
理论上来说,网络可以在不对原始输入图像执行降采样的操作,通过堆叠多个的卷积层来构建深度神经网络,如此一来便可以在保留更多空间细节信息的同时提取到更具有判别力的抽象特征。然而,考虑到计算机的算力瓶颈,通常都会引入池化层,来进一步地降低网络整体的计算代价,这是引入池化层最根本的目的。
池化层大大降低了网络模型参数和计算成本,也在一定程度上降低了网络过拟合的风险。概括来说,池化层主要有以下五点作用:
-
增大网络感受野
-
抑制噪声,降低信息冗余
-
降低模型计算量,降低网络优化难度,防止网络过拟合
-
使模型对输入图像中的特征位置变化更加鲁棒
1.3 池化核大小
池化窗口的大小,在PyTorch里池化核大小可以是一个整数或者一个元组,例如 kernel_size=2 或者 kernel_size=(2, 3)。
- 如果是一个整数,则表示高和宽方向上的池化窗口大小相同;
- 如果是一个元组,则第一个元素表示高方向上的池化窗口大小,第二个元素表示宽方向上的池化窗口大小。
1.4 步幅大小
用于指定池化窗口在高和宽方向上的步幅大小,可以是一个整数或者一个元组,例如 stride=2 或者 stride=(2, 3)。
- 如果是一个整数,则表示高和宽方向上的步幅大小相同;
- 如果是一个元组,则第一个元素表示高方向上的步幅大小,第二个元素表示宽方向上的步幅大小。
1.5 填充
池化层的填充(padding)可以控制池化操作在特征图边缘的行为,使得池化后的输出特征图与输入特征图大小相同或相近。
在池化操作时,如果输入特征图的尺寸不能被池化窗口的大小整除,那么最后一列或者最后一行的部分像素就无法被包含在池化窗口中进行池化,因此池化后的输出特征图尺寸会减小。
通过在输入特征图的边缘添加填充,可以使得池化操作在边缘像素处进行池化,避免了信息的丢失,并且保持了输出特征图的大小与输入特征图相同或相近。同时,填充也可以增加模型的稳定性,减少过拟合的风险。
需要注意的是,池化层的填充和卷积层的填充有所不同:
- 池化层的填充通常是指在输入特征图的边缘添加0值像素;
- 卷积层的填充是指在输入特征图的边缘添加0值像素或者复制边缘像素。
PyTorch里的填充大小可以是一个整数或者一个元组,例如 padding=1 或者 padding=(1, 2)。
- 如果是一个整数,则表示在高和宽方向上的填充大小相同;
- 如果是一个元组,则第一个元素表示高方向上的填充大小,第二个元素表示宽方向上的填充大小。默认为 0,表示不进行填充。
2 pytorch中的池化函数
PyTorch 提供了多种池化函数,用于对输入数据进行不同类型的池化操作。

以下是一些常用的 PyTorch 池化函数:

本文围绕池化展开,介绍了池化的概念、作用,包括降低计算代价、防止过拟合等。还阐述了池化核大小、步幅大小和填充等参数。重点讲解了PyTorch中的多种池化函数,如平均池化、最大池化和全局池化,并给出了不同维度池化层的实现示例。
最低0.47元/天 解锁文章
709

被折叠的 条评论
为什么被折叠?



