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

能否用Keras的load_model在后端访问model.h5?Heroku部署加载失败求助

解决Heroku部署Flask应用加载.h5模型失败的问题

以下是几种常见的排查和解决方法:

1. 修正模型文件路径

本地测试时直接用model.h5能找到文件,但Heroku部署后应用的工作目录可能和本地不一致,导致路径错误。你需要通过代码获取绝对路径:

  • 如果在Flask上下文中(比如路由函数内),可以用current_app.root_path拼接路径:
import os
from flask import current_app
from tensorflow.keras.models import load_model

model_path = os.path.join(current_app.root_path, 'model.h5')
model = load_model(model_path)
  • 如果不在Flask上下文里,用当前脚本的目录来拼接:
import os
from tensorflow.keras.models import load_model

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

2. 检查Heroku Slug大小限制

Heroku默认限制应用slug(包含代码、依赖、静态文件等的压缩包)大小为500MB,如果你的model.h5文件过大,可能导致部署时文件未被完整上传。

  • 查看Heroku日志,确认是否有slug过大的警告信息。
  • 如果模型超过限制,建议将模型存储到外部云存储,部署时从存储服务下载到Heroku的临时目录/tmp再加载:
import boto3
import os
from tensorflow.keras.models import load_model

# 初始化S3客户端(需配置环境变量存储密钥)
s3 = boto3.client('s3')
temp_model_path = '/tmp/model.h5'

# 从S3下载模型到临时目录
s3.download_file('你的存储桶名称', 'model.h5', temp_model_path)
model = load_model(temp_model_path)

3. 对齐依赖版本

本地和Heroku上的TensorFlow/Keras版本不一致,可能导致模型加载失败。确保requirements.txt中指定的版本与本地测试环境完全一致,例如:

tensorflow==2.15.0
flask==2.3.3
# 其他依赖...

4. 确认模型文件完整性

GitHub上传二进制文件时可能出现损坏,尤其是大文件:

  • 检查GitHub仓库中model.h5的文件大小是否与本地一致,若不一致,重新上传。
  • 如果模型文件超过100MB,需要使用Git LFS管理大文件,并在Heroku添加heroku-buildpack-git-lfs构建包,确保部署时能正确拉取模型文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:35:40