tensorflow_model_server:错误"The first dimension of paddings must be the rank of inputs[4,2]..."



我使用tensorflow_model_server来提供SavedModel。我一直得到这个响应代码400和以下错误:

{ "error": "The first dimension of paddings must be the rank of inputs[4,2] [1,1,1,208,770,3]\n\t [[{{node Generator/FlatConv/sequential/zero_padding2d/Pad}}]]" }

保存的模型cli show的输出

MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:
signature_def['__saved_model_init_op']:
The given SavedModel SignatureDef contains the following input(s):
The given SavedModel SignatureDef contains the following output(s):
outputs['__saved_model_init_op'] tensor_info:
dtype: DT_INVALID
shape: unknown_rank
name: NoOp
Method name is: 
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['input_1'] tensor_info:
dtype: DT_FLOAT
shape: (-1, -1, -1, 3)
name: serving_default_input_1:0
The given SavedModel SignatureDef contains the following output(s):
outputs['output_1'] tensor_info:
dtype: DT_FLOAT
shape: (-1, -1, -1, 3)
name: StatefulPartitionedCall:0
Method name is: tensorflow/serving/predict
WARNING:tensorflow:From /tensorflow-1.15.0/python3.6/tensorflow_core/python/ops/resource_variable_ops.py:1781: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.
Defined Functions:
Function Name: '_default_save_signature'
Option #1
Callable with:
Argument #1
input_1: TensorSpec(shape=(?, ?, ?, 3), dtype=tf.float32, name='input_1')

预处理

img_path = "/content/input_images/my_img.jpg"
img = np.array(Image.open(img_path).convert("RGB"))
img = np.expand_dims(img, 0).astype(np.float32) / 127.5 - 1

请求代码:

payload = {
"instances": [{'input_1': [input_image.tolist()]}]
}
headers = {"content-type": "application/json"}
json_response = requests.post('http://localhost:8501/v1/models/my_model:predict', data=json.dumps(payload), headers=headers)
print("Request complete")
print (json_response)
response_text =  json_response.text
response_text

响应/输出

Request complete
<Response [400]>
'{ "error": "The first dimension of paddings must be the rank of inputs[4,2] [1,1,1,449,674,3]\n\t [[{{node Generator/FlatConv/sequential/zero_padding2d/Pad}}]]" }'

代码在Colab上运行

我不明白这里出了什么问题。

这意味着你的输入数据应该是四维数组,而你有6d

试试这个:

"instances": [{'input_1': np.squeeze(input_image).tolist()}]

去除外层[]并挤压,它似乎可以将6d减少到4d,这可能会奏效。

当我有一个多模态输入时,我遇到了类似的错误,其中第一项是图像,第二项是字符串。我试着删除图像输入中的批次维度,它起作用了。在我看来,这似乎是tensorflow发球中的一个错误。它应该能够处理一批图像的散列。

(或者,如果你之前没有np.expand_dims,你就不需要挤压。

相关内容

最新更新