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

使用最新版Keras加载旧版v2.3.1保存的.h5模型报错

旧版Keras(v2.3.1)模型在新版Keras中加载报错的解决办法

问题说明

使用Keras v2.3.1创建并保存为.h5格式的模型,在新版Keras中调用load_model()加载时出现如下错误:

ValueError: Kernel shape must have the same length as input, but received kernel of shape (4, 4, 1, 128) and input of shape (None, None, 6, 7, 1).

该模型在旧版Keras环境中可正常加载,仅新版环境下触发维度不匹配异常。

问题原因

Keras版本迭代后,卷积层对输入维度的处理逻辑发生了变化。旧版Keras(v2.3.1属于早期v2.x版本)中卷积核的维度定义逻辑与新版不兼容,导致加载时模型结构解析出现错位,原本适配4D输入的卷积核被错误解析为对应5D输入的结构,进而引发形状不匹配报错。

可行解决方案

1. 兼容模式加载后调整并重新编译

加载模型时跳过编译步骤,避免即时的维度检查,之后手动修正输入维度并重新编译:

from keras.models import load_model

# 不编译加载模型
model = load_model('model.h5', compile=False)
# 根据旧版模型的实际输入维度调整,示例为(None, None, 1)
model.input.set_shape((None, None, 1))
# 按需求重新编译模型
model.compile(optimizer='adam', loss='你的损失函数')

2. 借助旧版环境转存为SavedModel格式

若仍能访问旧版Keras环境,先加载模型并导出为新版支持的SavedModel格式,再在新版环境中加载:

# 旧版Keras环境执行
from keras.models import load_model

model = load_model('model.h5')
# 导出为TensorFlow SavedModel格式
model.save('saved_model_dir', save_format='tf')

# 新版Keras环境执行
from tensorflow.keras.models import load_model

model = load_model('saved_model_dir')

3. 手动重构模型并加载权重

如果前两种方法无效,可以在新版Keras中完全复刻旧版模型的结构,再通过权重文件加载参数:

from keras.models import Sequential
from keras.layers import Conv2D, Dense, ...  # 导入旧版模型用到的层

# 1:1复刻旧版模型的层结构与参数
model = Sequential()
model.add(Conv2D(128, (4,4), input_shape=(None, None, 1), ...))  # 参数要和旧版完全一致
# 添加其他层...

# 加载权重,跳过不匹配检查并按层名匹配
model.load_weights('model.h5', by_name=True, skip_mismatch=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:13:19