Python 如何将多个2d数组作为输入传递给tensorflow服务api?

Python 如何将多个2d数组作为输入传递给tensorflow服务api?,python,python-3.x,tensorflow,tensorflow-serving,Python,Python 3.x,Tensorflow,Tensorflow Serving,我有一个tensorflow模型,它以两个2d数组作为输入 这就是我训练模型的方法 x.shape == (100, 250) y.shape == (100, 10) model.fit([x,y], y_train) 现在我使用tensorflow服务API部署到生产环境中。现在,当我试图为预测发出api请求时,我得到了一个错误 “{'error':'实例是一个简单的列表,但根据tensorinfo_map'}需要将对象列表作为多个输入张量” 我也有类似的问题。我想结合服务API测试我保

我有一个tensorflow模型,它以两个2d数组作为输入

这就是我训练模型的方法

x.shape == (100, 250)
y.shape == (100, 10)

model.fit([x,y], y_train)
现在我使用tensorflow服务API部署到生产环境中。现在,当我试图为预测发出api请求时,我得到了一个错误

“{'error':'实例是一个简单的列表,但根据tensorinfo_map'}需要将对象列表作为多个输入张量”


我也有类似的问题。我想结合服务API测试我保存的模型。首先,我编写了以下POST命令来获得预测:
curl-g-d“{”“instances”“”:“[[[1581948102529415.40446099999998,47.24188200000004,1]]}”-X POSThttp://localhost:8501/v1/models/my_model:predict
。通过这个输入,我得到了与您相同的错误。如本文所述,您必须以以下方式提供输入数据:
curl-d“{”“实例”“:[{”“NAME1W1”“:[158],“NAME1W2”“:[194],“ZIP”“:[”“8102”“],“STREETW”“:[5294],“LONGITUDE”“:15.4044609999999998”“纬度”“:47.241882000000004”“ASG”“:[1]}}”-X柱http://localhost:8501/v1/models/my_model:predict
。不要对“”感到困惑,我不得不使用它们,因为我在Windows而不是Linux上使用curl。

当您有多个输入时,您需要知道GraphDef中输入的名称,并将dict列表传递给tensorflow服务

首先,通过在终端中运行此命令,确保输入名称正确

saved_model_cli show --dir /home/your_user_name/path/to/your/saved_model/1 --all
在我的例子中,我得到以下内容作为输出的一部分。重要的是输入的名称是
input_1
input_2
,在我的例子中也是如此

signature_def['serving_default']:给定的SavedModel SignatureDef 包含以下输入: 输入['input_1']张量信息: dtype:DT_FLOAT 形状:(-1,2) 名称:服务\u默认\u输入\u 1:0 输入['input_2']张量信息: dtype:DT_FLOAT 形状:(-1,2) 名称:服务\u默认\u输入\u 2:0

此外,正如您所看到的,每个输入分别包含两个字段

最后,我可以发送一个http请求,请求使用[1,0]的
input_1
和[0.36708057,0.66139287]的
input_2
进行预测

import requests
import json

data = json.dumps({"signature_name":"serving_default","instances":[{'input_1':[1., 0.],'input_2':[0.36708057, 0.66139287]}]})
headers = {"content-type":"application/json"}
json_response = requests.post('http://localhost:8501/v1/models/test:predict',data=data,headers=headers)
print(json.loads(json_response.text))

输出是
{'predictions':[[0.315578]]}

您能否分享您的完整代码,以便我们可以帮助您。另外,通过运行命令,
,共享您的SignatureDef!已保存的\u model\u cli show--dir PathOfModel \--tag\u set service--signature\u def predict
。谢谢你找到解决方法了吗?@bonobo如果我有多个输入,那么在训练时,我将输入作为dict传递,键作为输入名称,值作为输入值。在这种情况下,当向tensor flow服务发送输入时,我可以将其作为dict传递,并使用适当的键进行多个输入。
import requests
import json

data = json.dumps({"signature_name":"serving_default","instances":[{'input_1':[1., 0.],'input_2':[0.36708057, 0.66139287]}]})
headers = {"content-type":"application/json"}
json_response = requests.post('http://localhost:8501/v1/models/test:predict',data=data,headers=headers)
print(json.loads(json_response.text))