复刻模型时Conv2D输出形状及参数量不符合预期如何解决
问题修复方案
1. 输出形状不匹配原因
你当前代码先通过ZeroPadding2D(padding=((1,0),(1,0)))将原始224×224的输入扩充为225×225,后续Conv2D层默认步长为1、填充设置为same,输出尺寸和输入尺寸一致,因此得到225×225的输出。
要得到112×112的输出,需要:
- 删除多余的
ZeroPadding2D层 - 给Conv2D层设置步长参数
strides=(2,2),特征图尺寸会随步长减半,224×224输入经过步长2的3×3卷积后正好输出112×112。
2. 参数量不匹配原因
你当前得到的448参数量计算逻辑为:3(卷积核高)*3(卷积核宽)*3(输入通道数)*16(输出通道数) +16(偏置项)=448。原模型的卷积层没有启用偏置项,因此需要给Conv2D层设置use_bias=False,此时参数量计算为3*3*3*16=432,和原模型一致。
修正后代码
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D, ZeroPadding2D, InputLayer, Input from tensorflow.keras.models import Model inputs = Input(shape=(224, 224, 3)) # 移除多余的ZeroPadding2D层,设置步长为2、关闭偏置项 x = Conv2D(16, kernel_size=(3, 3), strides=(2,2), padding="same", use_bias=False)(inputs) x = Dense(1500, activation="relu")(x) x = Dense(1000, activation="relu")(x) prediction = Dense(784, activation='softmax')(x) model_functional = Model(inputs=inputs, outputs=prediction) model_functional.summary()
内容的提问来源于stack exchange,提问作者Usama Aleem
相关产品推荐
相关产品推荐

