一、池化层是什么?
池化层是卷积神经网络的重要组成部分,通过缩小特征图(feature map)的尺寸,减少网络计算量,降低过拟合风险,从而提升机器学习的效率。同时,池化层也能够升高网络的视角,减轻对目标物体位置的依赖。池化层的主要作用有两个:一是加速运算,二是提取显著特征,为后续的分类工作提供基础。
二、Poly层
在池化层的基础上,poly层是一种可以在本质上实现max pooling功能的变体。与max pooling不同的是,除了选择一组最大值外,poly具有在特征映射中提取多个显着特征的能力。这通过对特定区域上所有值的平均值进行计算后,再与一组最大值相结合进行实现。Poly层可以较好地保留局部显著性,并通过提取有效特征来提升网络分类的准确性。
三、Max Pooling
max pooling作为一种常用的池化层方法,它简单直接,易于实现,由于其能够选取图像局部区域内最大的特征响应,从而对特征视觉上进行了优化。算法效率高,能够有效地减少网络的参数数量和计算量,能够减轻过拟合现象,保留特征信息,快速提升物体识别性能。max pooling模块常会使用2~3个超参数:池化窗口的大小、步长和padding方式,例如:
MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None, **kwargs)
四、Polluteing形式
polluteing层是一种特殊的池化层形式,与传统的pooling层不同,它不仅考虑最大值,还对不同卷积核的响应进行权重平均。polluteing的独特之处在于,在进行windows操作时,可以使用一些已知的复杂函数来代替原来的max或者average函数,增强层次性。表达式是一个积分,其中在原始数据的不同窗口上调用已知的映射函数。polluteing层具有一定的可变性,可以通过各种函数形式来实现区域查询和特征汇集,包括最大值、平均值、L2范数等。
代码示例: x = tf.constant([ [[2.0], [1.0]], [[0.0], [3.0]] ]) pool = tf.nn.avg_pool( x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME" ) print(pool)
五、参数共享
池化层自己并没有可训练的参数,甚至记忆容易摧毁,它并不会把所有可知的东西存下来,而是尝试着在每个池化滤波器上公用一个权重数组,这是一种参数共享技巧,同时使得模型的学习更为稳定和灵活,降低了过拟合的风险。