ResNet50迁移学习时global_average_pooling2d层维度不匹配报错如何解决?
错误原因
你在初始化ResNet50时设置了pooling='avg'参数,该参数会让基础模型输出前自动执行全局平均池化操作,最终base_model.output的输出形状为(None, 2048),是2维张量。而你后续又添加了GlobalAveragePooling2D()层,该层要求输入必须是4维张量(形状为(批次大小, 高度, 宽度, 通道数)),两者维度不匹配,因此触发报错。
修复方案
两种方案任选其一即可正常运行:
- 方案1:移除
ResNet50初始化时的pooling='avg'参数,保留后续的GlobalAveragePooling2D()层。修改后的基础模型初始化代码为:
base_model = ResNet50(include_top = False, weights = 'imagenet')
- 方案2:移除后续单独添加的
GlobalAveragePooling2D()层,直接用base_model.output接入全连接层。修改后的模型构建部分代码为:
base_model = ResNet50(include_top = False, weights = 'imagenet', pooling='avg') x = base_model.output x = Dense(1024, activation = 'relu')(x) predictions = Dense(train_generator.num_classes, activation = 'softmax')(x) model = Model(inputs = base_model.input, outputs = predictions)
内容的提问来源于stack exchange,提问作者Vedant Modi
相关产品推荐
相关产品推荐

