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

TensorFlow从2.15.0升级到2.17.0后加载.h5模型报错

解决TensorFlow/Keras跨版本加载LSTM模型的time_major参数错误问题

以下是几个无需重新训练模型的可行方案:

方案1:自定义兼容LSTM类,加载时忽略未知参数

新版本Keras(3.x)的LSTM层不再将time_major作为初始化参数(该参数现在属于call方法的调用参数),加载旧模型时会因参数不兼容报错。你可以定义一个兼容类,在初始化时自动过滤掉不被支持的参数:

import tensorflow as tf
from tensorflow.keras.layers import LSTM

class CompatLSTM(LSTM):
    def __init__(self, *args, **kwargs):
        # 移除新版本不支持的time_major参数
        kwargs.pop('time_major', None)
        super().__init__(*args, **kwargs)

# 加载模型时指定自定义兼容类
model = tf.keras.models.load_model('your_model.h5', custom_objects={'LSTM': CompatLSTM})

方案2:在旧环境中将模型转为SavedModel格式

.h5是Keras旧格式,跨版本兼容性弱;SavedModel是TensorFlow原生格式,对版本迭代的适配性更好。在TensorFlow 2.15环境中执行以下操作:

# 旧环境加载原模型
old_model = tf.keras.models.load_model('your_model.h5')
# 保存为SavedModel格式
old_model.save('saved_model_dir')

之后在新项目(TensorFlow 2.17/Keras 3.5)中直接加载SavedModel:

model = tf.keras.models.load_model('saved_model_dir')

SavedModel会自动处理层参数的版本兼容问题,通常能直接解决错误。

方案3:修正模型配置的正确流程(针对你之前的修改尝试)

如果之前修改model_config未生效,可能是操作流程有误。正确步骤如下:

  1. 在旧环境加载模型并提取配置:
    model = tf.keras.models.load_model('your_model.h5')
    config = model.get_config()
    
  2. 遍历配置中的层,移除LSTM层的time_major参数:
    for layer in config['layers']:
        if layer['class_name'] == 'LSTM':
            layer['config'].pop('time_major', None)
    
  3. 用修改后的配置重建模型并加载原权重:
    new_model = tf.keras.Model.from_config(config)
    new_model.set_weights(model.get_weights())
    # 保存修正后的模型
    new_model.save('fixed_model.h5')
    
  4. 在新项目中加载这个修正后的模型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:33:18