You need to enable JavaScript to run this app. Flask调用TensorFlow模型predict时报eager/graph模式不兼容错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Flask调用TensorFlow模型predict时报eager/graph模式不兼容错误如何解决

问题原因

该报错是TensorFlow 1.x和2.x版本特性混用导致的不兼容问题:
TensorFlow 2.x默认开启eager执行模式,你加载的模型本身是eager模式下构造的,但预测代码里使用了TensorFlow 1.x专属的session+graph.as_default()写法,强制把预测逻辑切到了图模式下执行,两种模式冲突触发了报错。你之前设置的model.run_eagerly = True未生效,是因为外层的graph上下文强制覆盖了该参数的作用。

修复方案
  • 方案1(优先尝试):移除TF1.x风格的session/graph上下文代码
    TensorFlow 2.x不需要手动管理session和graph,直接删除预测代码里的两层with上下文即可,修改后代码如下:
image = np.expand_dims(_image, axis=0)
pr_mask = model.predict(image).round()
# b,g,r = cv2.split(_image)
r,g,b = cv2.split(_image)
rgb_img = cv2.merge([r,g,b])
print('success predict')
  • 方案2:保证模型加载和预测在同一个graph上下文中
    如果你的项目必须保留session相关逻辑,要保证加载模型和执行预测使用同一个graph,在加载模型时就套入对应的上下文:
import tensorflow as tf
graph = tf.Graph()
session = tf.compat.v1.Session(graph=graph)
# 加载模型时就放入graph上下文
with graph.as_default():
    with session.as_default():
        # 替换为你实际的模型加载逻辑
        model = tf.keras.models.load_model("your_model_path.h5")

预测时保留原有的session、graph上下文写法即可。

  • 方案3:替换predict调用为直接模型调用
    TensorFlow 2.x中模型实例可直接作为函数调用,走eager执行逻辑,不会触发图模式检查,替换写法如下:
image = np.expand_dims(_image, axis=0)
with session.as_default():
    with session.graph.as_default():
        # 替换predict为直接调用模型,再转numpy数组后取整
        pr_mask = model(image).numpy().round()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 03:48:03