Keras搭建验证码OCR模型两次MaxPool2D后宽高较预期少1报错
问题原因
你的错误根源是第二个Conv2D层未设置padding='same'参数,导致特征图在卷积阶段发生非预期的尺寸缩小:
- 输入图片初始尺寸:(120, 40, 1)
- 第一层
Conv2D设置了padding='same',卷积后尺寸不变,经过第一个MaxPool2D(2,2)下采样后,特征图尺寸变为(60, 20, 32) - 第二层
Conv2D默认使用padding='valid'参数,3×3卷积核会在宽、高方向各削减2个像素,卷积后特征图尺寸变为(58, 18, 64),再经过第二个MaxPool2D(2,2)下采样后,最终尺寸就是报错里的(29, 9, 64),和你预期的4倍下采样结果(30, 10, 64)不符,Reshape时总元素数不匹配触发报错。
修复方案
给第二个Conv2D层添加padding='same'参数即可,修改后的代码段如下:
# second conv block x = layers.Conv2D( 64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same', name='Conv2' )(x) x = layers.MaxPool2D((2, 2), name='Pool2')(x)
修改后两次卷积都不会改变特征图尺寸,经过两次2倍下采样后宽高正好是初始的1/4,符合你预设的Reshape维度要求。
内容的提问来源于stack exchange,提问作者Matheus Leão
相关产品推荐
相关产品推荐

