Tensorflow版本:1.14.0
Tensorflow服务版本:1.14.0
保存的估算器模型有多个命名输入,其键为input_1
,input_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获取输出。我已经尝试按照以下方式请求格式,但是都失败了:
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
错误。wrong key of input
,它给了curl -d '{"instances": [{"examples": {"input_1": [1],"input_2": [1]}}]}' -X POST http://localhost:8501/v1/models/from_estimator:predict
错误。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
错误。那么如何正确设置多个命名输入呢?谢谢〜