【问题标题】:Keras Tensor is not an element of this graphKeras 张量不是该图的元素
【发布时间】:2020-12-31 17:44:36
【问题描述】:

我有 Python 3.6.9、Tensorflow 1.14.0 和 Jupyter Notebook 5.7.9。我在 Jupyter Notebook 中创建了一个神经网络并将其保存到一个文件中:

model = Sequential([
    Dense(16, input_shape=(2,), activation="relu"),
    Dense(len(classes), activation="softmax")
])

model.compile(optimizer="rmsprop", loss="mse")
# Training, testing, etc...
model.save("model.h5")

现在,我想在 Flask 服务器中加载这个保存的模型并预测一些输出:

model = load_model("model.h5")

y = model.predict(np.array([[1, 0]]))

但是,出现错误:

Tensor Tensor("dense_1/Softmax:0", shape=(?, 8), dtype=float32) 不是该图的元素。

所以我一直在寻找solution 并修改了 Flask 代码:

tf.keras.backend.clear_session()
model = load_model("model.h5")
model._make_predict_function()

y = model.predict(np.array([[1, 0]]))

现在,又出现了一个错误:

在图中未找到在 feed_devices 或 fetch_devices 中指定的 Tensor dense_input:0

我又在找solution

tf.keras.backend.clear_session()
model = load_model("model.h5")
model._make_predict_function()

global graph
global sess
graph = tf.get_default_graph()
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

with graph.as_default():
    tf.keras.backend.set_session(sess)
    y = model.predict(np.array([[1, 0]]))

最后没有错误,但 model.predict 返回绝对糟糕(随机)的结果,即使 Jupyter Notebook 返回正确的结果 - 也许网络中的预训练权重被删除了?有什么办法可以解决吗?

【问题讨论】:

    标签: python file tensorflow flask keras


    【解决方案1】:

    我找到了解决方案,这段代码应该可以工作:

    global graph
    graph = tf.get_default_graph()
    session = tf.keras.backend.get_session()
    init = tf.global_variables_initializer()
    session.run(init)
    lum_class_nn = load_model("model.h5")
    
    with graph.as_default():
        tf.keras.backend.set_session(session)
        y = model.predict(np.array([[1, 0]]))
    

    【讨论】:

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