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

Keras(TensorFlow后端)Graph Session Empty错误求助

解决Keras中RuntimeError: The Session graph is empty的问题

嘿,我明白你遇到的麻烦了——在保留with graph.as_default()用法的前提下,调用K.get_session().graph时触发了空图错误对吧?这问题其实和Keras与TensorFlow的图上下文绑定逻辑有关,我来给你捋清楚怎么解决。

问题根源

当你使用with graph.as_default():时,只有在这个代码块内的操作(比如加载模型、定义计算节点)才会被添加到这个graph实例中。如果你的K.get_session().graph调用不在这个上下文里,或者你加载模型的操作没放在这个块内,那session绑定的还是默认的空graph,自然会抛出错误。

正确的实现方式

你需要提前创建好graph实例,然后把所有和模型、图相关的操作都放到with graph.as_default():的上下文里,包括模型加载、打印输出,甚至获取session的操作。直接使用你创建的graph实例,而不是从session里反向获取。

给你一个符合需求的示例代码:

import keras.backend as K
import tensorflow as tf
from keras.applications import ResNet50  # 以ImageNet预训练的ResNet50为例

# 先创建我们要使用的graph实例
target_graph = tf.Graph()

with target_graph.as_default():
    # 在这里加载ImageNet预训练模型
    model = ResNet50(weights='imagenet')
    # 输出hello world
    print("hello world")
    # 此时获取session,它会自动绑定当前默认的target_graph
    sess = K.get_session()
    # 如果需要操作图,直接用我们创建的target_graph即可
    print(f"当前图的操作数量: {len(target_graph.get_operations())}")

# 后续如果要使用这个模型或图,也要确保在对应的上下文里
with target_graph.as_default():
    # 这里可以执行模型推理等操作
    pass

关键注意点

  • 不要在with块外调用K.get_session().graph,因为此时默认图可能还是空的,或者不是你想要的那个图
  • 所有需要添加到目标图的操作(模型初始化、变量定义、计算节点)必须放在with graph.as_default():内部
  • 如果你是在多线程环境下运行,每个线程都需要重新进入对应的graph上下文,避免图混淆

这样调整后,你既保留了with graph.as_default()的用法,也不会再遇到空图的错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:24:23