畅游人工智能之海--Keras教程之池化层
畅游人工智能之海--Keras教程之池化层
各位读者大家好,上周我们详细讲解了Keras的核心网络层,相信大家已经对核心网络层的作用以及使用方法有了一个清晰的认识。这周我们将要开展池化层和卷积层的讲解了,这篇文章就是对池化层的讲解。
首先我们要统一说一下池化层的作用。池化层放在连续的卷积层中间,用于压缩数据和参数的量,防止过拟合。其具体操作与卷积层的操作基本相同,只不过池化层的卷积核只取对应位置的最大值、平均值等(最大池化、平均池化),且不经过反向传播的修改。总结一下,作用有两个:①invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度);②保留主要的特征同时减少参数(降维,效果类似PCA)和计算量,防止过拟合,提高模型泛化能力。
池化层操作又分为平均池化和最大池化。根据相关理论,特征提取的误差主要来自两个方面:①邻域大小受限造成的估计值方差增大;②卷积层参数误差造成估计均值的偏移。一般来说,平均池化能减小第一种误差,更多地保留图像的背景信息,最大池化能减小第二种误差,更多地保留纹理信息。
池化层的操作方式我们可以通过以下的图片来清晰地了解。
最大池化图示
平均池化图示
全局池化操作即是对指定的张量的全局数据进行最大池化或者平均池化操作。池化层中的1D是对时序数据进行池化操作,2D是对空间数据进行池化操作,3D是对空间或时空间数据进行池化操作。
MaxPooling1D层
1 | keras.layers.MaxPooling1D( |
输入尺寸:
如果 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层
1 | keras.layers.MaxPooling2D( |
输入尺寸:
如果 data_format='channels_last: 尺寸是 (batch_size, rows, cols, channels)的 4D 张量
如果 data_format='channels_first': 尺寸是 (batch_size, channels, rows, cols)的 4D 张量
输出尺寸:
如果 data_format='channels_last: 尺寸是 (batch_size, pooled_rows, pooled_cols, channels)的 4D 张量
如果 data_format='channels_first': 尺寸是 (batch_size, channels, pooled_rows, pooled_cols)的 4D 张量
MaxPooling3D层
1 | keras.layers.MaxPooling3D( |
输入大小:
如果data_format='channels_last': 尺寸是 (batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)的 5D 张量
如果data_format='channels_first': 尺寸是 (batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)的 5D 张量
输出大小:
如果data_format='channels_last': 尺寸是 (batch_size, pooled_dim1, pooled_dim2, pooled_dim3, channels)的 5D 张量
如果data_format='channels_first': 尺寸是 (batch_size, channels, pooled_dim1, pooled_dim2, pooled_dim3)的 5D 张量
AveragePooling1D层
1 | keras.layers.AveragePooling1D( |
输入尺寸:
如果 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)
AveragePooling2D层
1 | keras.layers.AveragePooling2D( |
输入尺寸:
如果 data_format='channels_last: 尺寸是 (batch_size, rows, cols, channels)的 4D 张量
如果 data_format='channels_first': 尺寸是 (batch_size, channels, rows, cols)的 4D 张量
输出尺寸:
如果 data_format='channels_last: 尺寸是 (batch_size, pooled_rows, pooled_cols, channels)的 4D 张量
如果 data_format='channels_first': 尺寸是 (batch_size, channels, pooled_rows, pooled_cols)的 4D 张量
AveragePooling3D层
1 | keras.layers.AveragePooling3D( |
输入大小:
如果data_format='channels_last': 尺寸是 (batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)的 5D 张量
如果data_format='channels_first': 尺寸是 (batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)的 5D 张量
输出大小:
如果data_format='channels_last': 尺寸是 (batch_size, pooled_dim1, pooled_dim2, pooled_dim3, channels)的 5D 张量
如果data_format='channels_first': 尺寸是 (batch_size, channels, pooled_dim1, pooled_dim2, pooled_dim3)的 5D 张量
GlobalMaxPooling1D层
1 | keras.layers.GlobalMaxPooling1D( |
输入尺寸:
如果 data_format='channels_last',输入为 3D 张量,尺寸为:(batch_size, steps, features)
如果data_format='channels_first',输入为 3D 张量,尺寸为:(batch_size, features, steps)
输出尺寸:
尺寸是 (batch_size, features) 的 2D 张量。
GlobalMaxPooling2D层
1 | keras.layers.GlobalMaxPooling3D( |
输入尺寸:
如果 data_format='channels_last: 尺寸是 (batch_size, rows, cols, channels)的 4D 张量
如果 data_format='channels_first': 尺寸是 (batch_size, channels, rows, cols)的 4D 张量
输出尺寸:
尺寸是 (batch_size, channels) 的 2D 张量。
GlobalMaxPooling3D层
1 | keras.layers.GlobalMaxPooling3D( |
输入大小:
如果data_format='channels_last': 尺寸是 (batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)的 5D 张量
如果data_format='channels_first': 尺寸是 (batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)的 5D 张量
输出尺寸:
尺寸是 (batch_size, channels) 的 2D 张量。
GlobalAveragePooling1D层
1 | keras.layers.GlobalAveragePooling1D( |
输入尺寸:
如果 data_format='channels_last',输入为 3D 张量,尺寸为:(batch_size, steps, features)
如果data_format='channels_first',输入为 3D 张量,尺寸为:(batch_size, features, steps)
输出尺寸:
尺寸是 (batch_size, features) 的 2D 张量。
GlobalAveragePooling2D层
1 | keras.layers.GlobalAveragePooling2D( |
输入尺寸:
如果 data_format='channels_last: 尺寸是 (batch_size, rows, cols, channels)的 4D 张量
如果 data_format='channels_first': 尺寸是 (batch_size, channels, rows, cols)的 4D 张量
输出尺寸:
尺寸是 (batch_size, channels) 的 2D 张量。
GlobalAveragePooling3D层
1 | keras.layers.GlobalAveragePooling3D( |
输入大小:
如果data_format='channels_last': 尺寸是 (batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)的 5D 张量
如果data_format='channels_first': 尺寸是 (batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)的 5D 张量
输出尺寸:
尺寸是 (batch_size, channels) 的 2D 张量。
相信大家经过今天的学习,能够获得对池化层的作用以及使用方式的认识,池化层是卷积神经网络的重要组成部分,希望大家在课下可以多多找实例进行再进一步的了解,让我们一起期待明天的卷积层教程吧!