运行DeepSeg项目train.py报错Shapes(7,7,6,64)与(64,3,7,7)不兼容
DenseNet预训练权重形状不匹配问题解决方案
你遇到的报错核心是卷积核维度顺序不兼容:该DeepSeg仓库默认适配通道优先(channels_first)的权重格式,权重维度顺序为(输出通道数, 输入通道数, 卷积核高, 卷积核宽),而你当前TensorFlow 2.1环境默认使用通道在后(channels_last)格式,权重维度顺序为(卷积核高, 卷积核宽, 输入通道数, 输出通道数),因此加载DenseNet121预训练权重时出现(7, 7, 6, 64)与(64, 3, 7, 7)形状不匹配的问题。
具体修复步骤
- 调整Keras全局数据格式配置
找到用户目录下的.keras/keras.json文件,将image_data_format字段值从channels_last修改为channels_first,修改后配置参考如下:
{ "floatx": "float32", "epsilon": 1e-07, "backend": "tensorflow", "image_data_format": "channels_first" }
- 降级依赖版本匹配仓库要求
该仓库原生基于TensorFlow 1.x开发,TensorFlow 2.1存在大量API不兼容问题,建议将依赖降级到对应兼容版本:
pip install tensorflow-gpu==1.15.0 keras==2.3.1
- 校验预训练权重适配性
确认你下载的DenseNet121预训练权重是适配单通道医学影像的版本,不要直接使用默认的ImageNet三通道预训练权重,避免输入通道数不匹配。 - 重新执行训练流程
完成上述修改后,重新运行train.py即可正常加载权重启动训练。
内容的提问来源于stack exchange,提问作者Sabir Khan Akash
相关产品推荐
相关产品推荐

