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

Keras加载model.h5本地运行正常,部署到Heroku时报错如何解决?

问题解决方案

步骤1:确认model.h5确实部署到了Heroku实例

  • 先检查你的GitHub仓库里是否有model.h5文件:如果文件大小超过100M,GitHub默认不允许直接上传,需要用Git LFS存储,否则你提交的只是个指针文件,实际模型数据没传上去,Heroku拉取的时候拿到的是无效文件,自然会被识别为非h5格式,触发SavedModel查找逻辑
  • 排查.slugignore缓存:删除.slugignore后需要清空Heroku的构建缓存再重新部署,执行命令heroku builds:cache:purge -a 你的Heroku应用名,之后重新push代码部署,避免之前的忽略规则缓存生效
  • 部署后可以临时加一行代码打印目录文件确认:在加载模型前加print(os.listdir(os.path.dirname(os.path.abspath(__file__)))),之后到Heroku应用的日志面板查看输出,确认model.h5在文件列表中

步骤2:修正路径加载逻辑

不要直接用相对路径加载,用当前脚本的绝对路径拼接模型文件名,避免工作目录偏移导致找不到文件,修改加载代码为:

import streamlit as st
import numpy as np
import cv2
from tensorflow.keras.models import load_model
import os

# 获取当前脚本所在目录的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
model_path = os.path.join(current_dir, "model.h5")
model = load_model(model_path, compile=False)

注意这里把from keras.models import load_model改成了from tensorflow.keras.models import load_model,避免独立keras库和TensorFlow内置keras的版本冲突,现在主流的TensorFlow版本都内置keras,不需要单独安装独立keras包。

步骤3:对齐TensorFlow版本

在你的项目的requirements.txt里明确指定TensorFlow版本,和你本地保存模型时用的版本完全一致,比如你本地用的是tensorflow==2.10.0,就写tensorflow==2.10.0,不要写tensorflow>=xxx或者不写版本,避免Heroku自动安装最新版本导致版本不兼容,高版本TensorFlow对旧版h5格式模型的加载逻辑有变动,会优先识别为SavedModel格式,出现你遇到的报错。

可选方案:如果h5加载始终有问题,可切换为SavedModel格式

如果上面的步骤都试了还是不行,可以把模型转成SavedModel格式,保存的时候用model.save("my_model")(不要加.h5后缀),就会自动生成一个my_model的文件夹,里面包含pb格式文件和变量目录,加载的时候直接传文件夹路径load_model("my_model")即可,这种格式是TensorFlow官方推荐的存储格式,兼容性更好,不会出现h5的版本适配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:36:03