Flask部署TensorFlow肺癌预测模型遇keras.src模块缺失问题求助
问题解决:用Flask部署TensorFlow模型报错
ModuleNotFoundError: No module named 'keras.src' 核心原因
pickle是通用Python对象序列化工具,但完全不适合保存TensorFlow/Keras神经网络模型。Keras模型内部依赖特定的模块结构(比如新版本Keras用keras.src作为内部路径),用pickle序列化后,环境或版本差异会直接导致加载时找不到对应模块。
解决方案:用TensorFlow官方方法保存/加载模型
1. 修改模型训练代码,用官方方式保存模型
把训练代码末尾的pickle.dump(model, open("model.pkl", "wb"))替换为TensorFlow官方保存方法:
# 保存为HDF5格式(轻量,适合小模型) model.save("lung_cancer_model.h5") # 或者保存为SavedModel格式(更适合生产环境,支持灵活部署) # model.save("lung_cancer_saved_model")
2. 修改Flask的app.py代码,用官方方法加载模型
去掉pickle相关代码,改用TensorFlow的加载逻辑,同时优化模型加载时机(避免每次请求重复加载):
from flask import Flask, request, render_template import tensorflow as tf import numpy as np app = Flask(__name__) # 提前加载模型到全局变量,提升请求响应速度 model = tf.keras.models.load_model("lung_cancer_model.h5") # 如果用SavedModel格式,替换为下面的代码 # model = tf.keras.models.load_model("lung_cancer_saved_model") @app.route("/") def home(): return render_template("index.html") @app.route("/predict", methods=["POST"]) def predict(): str_pred = '' age = int(request.form["age"]) final_age = (age - 62.08510638) / 46.0211257 gender = int(request.form["gender"]) yellow_finger = int(request.form["yellow_finger"]) anxiety = int(request.form["anxiety"]) peer_pressure = int(request.form["peer_pressure"]) chronic_disease = int(request.form["chronic_disease"]) fatigue = int(request.form["fatigue"]) allergy = int(request.form["allergy"]) wheezing = int(request.form["wheezing"]) alcohol_consuming = int(request.form["alcohol_consuming"]) coughing = int(request.form["coughing"]) swallowing_difficulty = int(request.form["swallowing_difficulty"]) chest_pain = int(request.form["chest_pain"]) list_data = [gender, final_age, yellow_finger, anxiety, peer_pressure, chronic_disease, fatigue, allergy, wheezing, alcohol_consuming, coughing, swallowing_difficulty, chest_pain] # 转换为模型期望的批量输入格式(1个样本,13个特征) list_data = np.array(list_data).reshape(1, -1) prediction_results = model.predict(list_data)[0][0] if prediction_results >= 0.5: return render_template("index.html", str_pred='Ada kanker paru-paru') else: return render_template("index.html", str_pred='Tidak ada kanker paru-paru') if __name__ == "__main__": app.run(debug=True)
3. 额外注意事项
- 保证Flask运行环境和模型训练环境的TensorFlow/Keras版本完全一致,避免版本差异引发的加载问题。
- 安装所有依赖:
pip install tensorflow flask numpy - 不要在predict函数内重复加载模型,否则会大幅降低请求处理速度。
关于你的疑问
完全可以用Flask部署TensorFlow神经网络模型,不需要更换开发语言。问题仅出在模型保存加载的方式错误,改用官方提供的方法即可解决。
内容的提问来源于stack exchange,提问作者renii
相关产品推荐
相关产品推荐

