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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:30:57