【问题标题】:Tensor is not an element of this graph during Keras load_model after tf.reset_default_graph()在 tf.reset_default_graph() 之后的 Keras load_model 期间,张量不是该图的元素
【发布时间】:2020-08-07 06:45:32
【问题描述】:

我有一个使用低级 TF API 的代码。我想使用 Keras 添加一些代码。 我在最简单的情况下遇到了一个神秘的错误:我有一个可以正确加载和预测的 Keras 模型。 但是,当我在 load_model 期间收到错误之前调用 tf.reset_default_graph 时

tf.reset_default_graph()
model = load_model("model.h5")

我得到: ValueError: Tensor Tensor("Placeholder:0", shape=(40, 80), dtype=float32) 不是该图的元素。

使用以下最少代码重现问题:

import tensorflow as tf
from keras.models import load_model

model = load_model("model.h5")
model.summary()

# tf.reset_default_graph() OR
tf.keras.backend.clear_session()

model = load_model("model.h5")
model.summary()

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    调试显示问题在于 Keras 使用默认会话(如果存在),并且如果在此会话上进行了一些初始化,则重置图表会导致 Keras 的混乱,因为它期望会话状态不会改变并且会话的图表不会被重置。我在文档中都没有看到这两个,这导致我在这个问题上花了几个小时。 因此,如果我想加载模型,然后通过调用 reset_default_graph 多次使用它,我需要保持与图的会话,如下所示:

    def load():
        with tf.Graph().as_default() as g:
            config = tf.ConfigProto(log_device_placement=False)
            config.gpu_options.allow_growth = True
            sess = tf.Session(graph=g, config=config)
            with sess.as_default():
                model = load_model("model.h5")
                model.summary()
                X = np.random.normal(0, 1, (20,2))
                pred = model.predict(X[np.newaxis])
                print(pred)
    
                return model, sess
    
    model, sess = load()
    
    with sess.as_default():
        X = np.random.normal(0, 1, (20, 2))
        pred = model.predict(X[np.newaxis])
        print(pred)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      相关资源
      最近更新 更多