1、语法
tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
2、参数说明
pool_size
: 下采样因子的大小。默认为(2, 2)。通常情况下,翻倍采样,例如将图片的大小从28x28减小到14x14。如果指定为(1, 1),则不会有下采样,输出的大小与输入相同。
strides
: 步长大小。默认为pool_size也就是2
。沿输入的高度和宽度方向的步长大小。
padding
: 全零填充。默认为'valid'。如果设置为'same',则在输入的边缘周围填充适当的数量,以便在进行池化操作时,输出大小与输入大小相同。
data_format
: 图像格式。默认为None,表示使用TensorFlow的默认数据格式。
3、示例
此示意图中,滑动块的最大值分别是[[7,5,6],[7,8,5],[4,5,7]],分别对应着输出块的唯一值。对于滑动块中的任何值,MaxPooling2D
层都会保留最大值,并将其他值丢弃。
MaxPooling2D
用于特征提取和降维。它通常被用于在卷积层后进行下采样,以降低卷积层输出的维度并减少计算量。
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.models import Sequential
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(8, 8, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(10, activation='softmax'))
model.summary()
打印模型:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 6, 6, 32) 320
max_pooling2d (MaxPooling2D (None, 3, 3, 32) 0
)
flatten (Flatten) (None, 288) 0
dense (Dense) (None, 10) 2890
=================================================================
Total params: 3,210
Trainable params: 3,210
Non-trainable params: 0
_________________________________________________________________
根据以上代码可以看出:
输入特征图:8*8(1)
第一层Conv2D卷积核:3*3(32)
第一层Conv2D输出为:6*6(32)
第二层MaxPooling2D的pool_size:2*2 (32)
第二层MaxPooling2D的输出为:3*3 (32)
第三层Flatten拉平后输出为:3*3*32=288(1)
第四层全连接层为:10