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

如何解决TensorFlow加载旧版本Keras模型后预测结果不准确的问题

问题原因确认

TF 2.5和2.6的版本差异确实是导致该问题的核心原因。
TF 2.5版本首次将keras_metadata.pb作为Keras模型SavedModel格式的必填校验文件,2.6版本加载模型时会优先校验该文件是否存在,你遇到的警告对应的加载逻辑触发提示为:

WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), NOT tf.saved_model.save(). To confirm, there should be a file named "keras_metadata.pb" in the SavedModel directory.

当检测不到该文件时,加载逻辑会回退到旧版TensorFlow SavedModel的加载路径,该路径不会正确绑定Keras模型的输入张量占位符,容易出现计算图缓存未更新的问题,也就是你遇到的输出固定为旧训练/测试集预测结果、不响应新输入的异常。

解决方案
  • 第一步:先确认保存的模型目录下是否存在keras_metadata.pb文件,如果不存在,说明你保存模型时要么误调用了tf.saved_model.save()接口,要么2.5版本的model.save()触发了兼容bug,没有生成必要的元数据文件。
  • 第二步:快速验证兼容性问题:可以搭建TF 2.5版本的虚拟环境,加载模型后运行新测试集,如果预测结果正常,即可确认是跨版本加载导致的异常。
  • 第三步:根据你的可操作场景选择修复方案:
    • 场景1:可访问原始训练代码和2.5版本运行环境:直接在2.5环境下执行tf.keras.models.save_model(model, "新保存路径", save_format="tf"),确保新生成的模型目录下有keras_metadata.pb文件,再转移到2.6环境下加载即可正常使用。
    • 场景2:无法访问原始训练环境,仅保留了保存好的模型文件:在2.6环境下加载模型时添加compile=False参数,加载完成后手动重新编译模型,清除旧的计算图缓存即可,示例代码如下:
      # 加载时关闭默认编译逻辑,避免兼容报错
      model = tf.keras.models.load_model("你的模型存储路径", compile=False)
      # 替换为你训练模型时实际使用的优化器、损失函数、评估指标
      model.compile(
          optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3),
          loss=tf.keras.losses.CategoricalCrossentropy(),
          metrics=["accuracy"]
      )
      
      编译完成后再执行预测,即可正常响应新测试集的输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:45:02