各位读者大家好,上周我们详细讲解了Keras的核心网络层,相信大家已经对核心网络层的作用以及使用方法有了一个清晰的认识。这周我们将要开展池化层和卷积层的讲解了,这篇文章就是对池化层的讲解。
首先我们要统一说一下池化层的作用。池化层放在连续的卷积层中间,用于压缩数据和参数的量,防止过拟合。其具体操作与卷积层的操作基本相同,只不过池化层的卷积核只取对应位置的最大值、平均值等(最大池化、平均池化),且不经过反向传播的修改。总结一下,作用有两个:①invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度);②保留主要的特征同时减少参数(降维,效果类似PCA)和计算量,防止过拟合,提高模型泛化能力。
池化层操作又分为平均池化和最大池化。根据相关理论,特征提取的误差主要来自两个方面:①邻域大小受限造成的估计值方差增大;②卷积层参数误差造成估计均值的偏移。一般来说,平均池化能减小第一种误差,更多地保留图像的背景信息,最大池化能减小第二种误差,更多地保留纹理信息。
池化层的操作方式我们可以通过以下的图片来清晰地了解。
最大池化图示
平均池化图示
全局池化操作即是对指定的张量的全局数据进行最大池化或者平均池化操作。池化层中的1D是对时序数据进行池化操作,2D是对空间数据进行池化操作,3D是对空间或时空间数据进行池化操作。
MaxPooling1D层
keras.layers.MaxPooling1D(
pool_size=2, #整数,最大池化的窗口大小
strides=None, #整数,或者是None。作为缩小比例的因数。例如,2会使得输入张量缩小一半。如果是None,那么默认值是pool_size。
padding='valid', #"valid" 或者 "same"(区分大小写)
data_format='channels_last' #字符串,channels_last(默认)或 channels_first之一。表示输入各维度的顺序。channels_last对应输入尺寸为(batch, steps, features),channels_first对应输入尺寸为(batch, features, steps)
)
输入尺寸:
如果 data_format='channels_last',输入为 3D 张量,尺寸为:(batch_size, steps, features)
如果data_format='channels_first',输入为 3D 张量,尺寸为:(batch_size, features, steps)
输出尺寸:
如果 data_format='channels_last',输出为 3D 张量,尺寸为:(batch_size, downsampled_steps, features)
如果data_format='channels_first',输出为 3D 张量,尺寸为:(batch_size, features, downsampled_steps)
MaxPooling2D层
keras.layers.MaxPooling2D(
pool_size=(2, 2), #整数,