【问题标题】:How can I send POST request to a ML Engine Model made in Keras?如何向 Keras 制作的 ML Engine 模型发送 POST 请求?
【发布时间】:2018-07-31 08:06:03
【问题描述】:

我做了一个 Keras 模型

model = Sequential() 
model.add(Dense(12, input_dim=7, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

在本地训练它

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Fit the model
model.fit(X_train, Y_train, epochs=150, batch_size=10)

测试了它的工作原理

example = np.array([X_test.iloc[0]])    
model.predict(example)

使用此功能保存

def to_savedmodel(model, export_path):
"""Convert the Keras HDF5 model into TensorFlow SavedModel."""
builder = saved_model_builder.SavedModelBuilder(export_path)
signature = predict_signature_def(inputs={'input': model.inputs[0]},
                                outputs={'income': model.outputs[0]})
K.clear_session()
sess = K.get_session()
builder.add_meta_graph_and_variables(
        sess=sess,
        tags=[tag_constants.SERVING],
        signature_def_map={
            signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature}
    )
sess.close()
K.clear_session()
builder.save()

该模型现在以.pb 格式保存在 GC 存储中。

我在 ML Engine 中创建了一个新模型并部署了第一个版本。 当我尝试通过 HTTP POST 请求使用它时,使用这个 json body

{
  "instances": [{
    "input": [1, 2, 3, 4, 5, 6, 7 ]
  }]
}

我收到此错误:

{
    "error": "Prediction failed: Error during model execution: AbortionError(code=StatusCode.NOT_FOUND, details=\"FeedInputs: unable to find feed output dense_34_input:0\")"
}

知道如何发送正确的正文或正确保存模型吗?

【问题讨论】:

  • This repo 包含用于 ML 引擎的良好且最新的样板代码,它可能会有所帮助。不过它是基于 tensorflow 的。
  • 但是,在保存模型之前清除 Keras 会话时,您不是丢弃了训练好的图吗?
  • 这篇文章有帮助吗:stackoverflow.com/questions/51432589/…
  • 是的!就是这样!你的第二个建议是正确的。我正在扔掉训练有素的图表。我做了一个有效的新功能:

标签: keras google-cloud-platform google-cloud-ml


【解决方案1】:

感谢 sdcbr。你为我指明了正确的方向。保存模型的函数正在丢弃我训练过的模型。我改变了它,现在运行良好:

def to_savedmodel(fname, export_path):
    with tf.Session() as sess:
        K.set_session(sess)
    model = load_model(fname)
    sess.run(tf.initialize_all_variables())
    K.set_learning_phase(0)
    builder = SavedModelBuilder(export_path)
    signature = predict_signature_def(
        inputs={"inputs": model.input},
        outputs={"outputs": model.output}) 
builder.add_meta_graph_and_variables(
        sess=sess,
        tags=[tag_constants.SERVING],
        signature_def_map={
            'predict': signature})
    builder.save()

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2021-05-29
    • 2014-08-04
    • 1970-01-01
    相关资源
    最近更新 更多