使用步长为1的MaxPooling时出现维度下降问题咨询
问题解答
你对池化层规则的认知遗漏了padding参数的影响,步长为1时池化层不降低维度的前提是开启了same填充模式。
1D池化输出长度计算规则
TensorFlow中池化层的输出维度由输入长度、池化核大小、步长、填充模式四个参数共同决定:
- 当填充模式为默认的
valid(不做边缘填充)时,输出长度计算方式为:output_len = (input_len - pool_size) // strides + 1
代入你的参数验证:输入长度为16,池化核大小为4,步长为1,计算结果为(16-4)//1 +1 = 13,和你模型summary输出的维度完全一致,属于正常运行结果。 - 当填充模式设为
same(自动在边缘补0)时,框架会自动计算需要填充的0的数量,保证步长为1时输出长度和输入长度完全相等。你可以把池化层代码修改为如下形式验证:
my_model.add(tf.keras.layers.MaxPooling1D(pool_size=(4), strides=(1), padding='same'))
修改后该层的输出形状会变为(None, 16, 1),不会出现维度降低的情况。
内容的提问来源于stack exchange,提问作者sergey_208
相关产品推荐
相关产品推荐

