如何在多个命名输入估算器模型上使用Tensorflow Servful Restful API?

时间:2019-10-30 03:57:31

标签: python tensorflow tensorflow-serving tensorflow-estimator

Tensorflow版本:1.14.0

Tensorflow服务版本:1.14.0


说明

保存的估算器模型有多个命名输入,其键为input_1input_2 ...,这些输入为tf.feature_column。*,我使用下面的代码保存了服务模型,其中{{ 1}}是输入列表:

feature_columns

保存模型后,我使用estimator.train(input_fn=lambda: train_input_fn(features, 1000), steps=100) serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn( tf.feature_column.make_parse_example_spec(feature_columns)) estimator.export_saved_model("from_estimator/", serving_input_fn) 显示此模型的输入和输出:

saved_model_cli

哪个打印

saved_model_cli show --dir /from_estimator/1572335377/ --tag_set serve --signature_def serving_default

请注意,输入的不是预期的键The given SavedModel SignatureDef contains the following input(s): inputs['examples'] tensor_info: dtype: DT_STRING shape: (-1) name: input_example_tensor:0 The given SavedModel SignatureDef contains the following output(s): outputs['logits'] tensor_info: dtype: DT_FLOAT shape: (-1, 100) name: MatMul_1:0 outputs['probabilities'] tensor_info: dtype: DT_FLOAT shape: (-1, 100) name: Softmax:0 Method name is: tensorflow/serving/predict input_1,而是input_2。令人困惑!

无论如何,我使用examples通过以下方式在本地运行模型:

saved_model_cli

它给出了正确的输出。

问题

我使用tensorflow服务的docker映像部署了该模型,并尝试从restful api获取输出。我已经尝试按照以下方式请求格式,但是都失败了:

  1. saved_model_cli run --dir from_estimator/1572335377/ --tag_set serve --signature_def serving_default --input_examples "examples=[{'input_1': [1],'input_2': [1]}]",它出现了curl -d '{"instances": [{"input_1": [1],"input_2": [1]}]}' -X POST http://localhost:8501/v1/models/from_estimator:predict错误。
  2. wrong key of input,它给了curl -d '{"instances": [{"examples": {"input_1": [1],"input_2": [1]}}]}' -X POST http://localhost:8501/v1/models/from_estimator:predict错误。
  3. Invalid argument: JSON Value: not formatted correctly for base64 data,它给了curl -d '{"instances": [{"examples": "{\"input_1\": [1],\"input_2\": [1]}"}]}' -X POST http://localhost:8501/v1/models/from_estimator:predict错误。

那么如何正确设置多个命名输入呢?谢谢〜

0 个答案:

没有答案