Flask加载Keras模型遇No file or directory found错误求助
问题分析与解决
首先明确:你遇到的核心错误是模型文件路径不正确,前面的GPU/TensorRT相关警告属于非致命提示,若你的机器没有NVIDIA GPU,完全可以忽略这些信息,不影响模型加载功能。
错误根源
你的代码中使用os.path.realpath('./modelo')构建模型目录路径,但Flask运行时的工作目录和你预期的不一致:
- 你的
app.py位于/desarrollo/cafeplag/src/下 - 模型文件实际在
/desarrollo/cafeplag/modelo/下 - 当你在
src目录下启动Flask时,./modelo会指向/desarrollo/cafeplag/src/modelo/(该目录不存在),而非你需要的项目根目录下的modelo文件夹。
解决方案
1. 先验证文件实际位置
通过终端确认文件是否存在,执行命令:
ls -l /desarrollo/cafeplag/modelo/
确保modelo.h5和pesos.h5确实存在,且文件名没有大小写错误(Linux系统路径区分大小写)。
2. 基于脚本路径构建绝对路径
修改路径构建代码,利用当前脚本的绝对路径定位模型目录,避免相对路径的歧义:
# 替换原来的model_dir、model_path、pesos_path相关代码 import os from flask import Flask, render_template app = Flask(__name__) # 获取当前脚本(app.py)所在目录的绝对路径 current_dir = os.path.dirname(os.path.abspath(__file__)) # 从src目录向上一级,找到项目根目录下的modelo文件夹 model_dir = os.path.join(current_dir, '../modelo') model_path = os.path.join(model_dir, 'modelo.h5') pesos_path = os.path.join(model_dir, 'pesos.h5') # 后续加载模型的代码不变 model = load_model(model_path) model.load_weights(pesos_path)
使用os.path.join拼接路径可以自动适配不同系统的路径分隔符,比直接字符串拼接更可靠。
3. 可选:指定Flask运行的工作目录
如果你习惯用相对路径,可在启动Flask时切换到项目根目录/desarrollo/cafeplag/,然后运行:
flask --app src/app.py run
这样./modelo就会正确指向项目根目录下的模型文件夹。
内容的提问来源于stack exchange,提问作者Wersly Bardales
相关产品推荐
相关产品推荐

