You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EfficientNetB0加载本地预训练h5权重时报层数不匹配错误如何解决

报错根因

你使用的Keras 2.6.0版本内置的EfficientNetB0网络结构,和你下载的h5权重对应的旧版本结构存在细微差异:2.6.0版本的EfficientNet默认新增了1层内置预处理层,所以模型总层数为131层,而你下载的权重对应旧版本结构没有该预处理层,总层数为130层,因此出现层数不匹配报错。

解决方法

按以下两种方案任选其一即可:

方案1:按层名匹配加载权重

初始化无权重的模型后,加载权重时添加by_name=True参数,仅匹配名称一致的核心层权重,自动跳过不匹配的新增层,代码修改如下:

from tensorflow.keras.applications import EfficientNetB0
from tensorflow.keras.layers import Input

# 先初始化无预训练权重的基础模型
basemodel = EfficientNetB0(weights=None, include_top=False, input_tensor=Input(shape=(224,224,3)))
# 加载本地权重,按层名匹配,跳过结构不匹配的层
basemodel.load_weights(r"C:\path\filename.h5", by_name=True)

该方案不会影响核心特征提取层的权重加载,对模型效果几乎无影响。

方案2:对齐模型结构

如果不想跳过层,可关闭2.6.0版本EfficientNet默认开启的内置预处理层,和旧版本权重的结构完全对齐后直接加载权重:

from tensorflow.keras.applications import EfficientNetB0
from tensorflow.keras.layers import Input

basemodel = EfficientNetB0(
    weights=None, 
    include_top=False, 
    input_tensor=Input(shape=(224,224,3)),
    # 关闭内置预处理层,和旧版本结构完全匹配
    include_preprocessing=False
)
# 无需加by_name参数即可直接加载权重
basemodel.load_weights(r"C:\path\filename.h5")

使用该方案需要注意:你需要自行在数据输入前添加对应的数据预处理逻辑,避免精度下降。

注意事项
  • 两种方案都不会影响EfficientNetB0的特征提取能力
  • 如果你本身已经在数据pipeline中实现了归一化等预处理步骤,优先选择方案2,避免重复预处理

内容的提问来源于stack exchange,提问作者Vadivel Vadivel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:51:00