TensorFlow服务:获取输入形状和标签

时间:2019-01-29 10:31:51

标签: python-3.x tensorflow-serving

我目前正在尝试建立一个TensorFlow Serving客户端,其任务是处理以下格式的消息队列:

{
  "model_url":"http://path/to/some/model",
  "image_url":"http://path/to/some/image"
}

换句话说,每条消息都说明应该使用哪种模型预测哪个图像。理想情况下,我不必在队列中指定任何其他信息即可使它起作用。

尽管有两个问题。输入图像的大小可以变化,而预期的输入大小是固定的(由模型确定)。因此,客户端必须对图像进行版本调整。为此,它必须知道预期的输入大小是什么。

我的具体问题是:如果我知道model_url,有没有一种方法可以向TensorFlow Serving服务器发送请求,从而告诉我预期的输入形状是什么样子?类似地,我需要知道与模型提供的预测相关的标签(例如,如果我们正在进行图像分类,则为“猫”,“狗”等)。

我正在寻找的是以下伪代码:

request_dict =    {
  "meta_info":["input_shape", "labels"]
}

response = requests.post(model_url, data=json.dumps(request_dict))

input_shape = response["input_shape"]
labels = response["labels"]

1 个答案:

答案 0 :(得分:2)

是的,您可以通过向TF服务器的/metadata路径发送请求,来从模型中请求所有形状的输入和输出。

以最简单的形式:

import requests
metadata_url = f'http://{host}:{port}/v1/models/{modelname}/metadata'
response = request.get(metadata_url).json()

响应将是一个字典,其中包含模型的完整signaturedef规范(即所有输入和输出的形状)。

如果使用REST API,这可能是最简单的。有关更多示例,请参见https://www.tensorflow.org/serving/api_rest(在“元数据API”下)。还应该知道,可以同时公开用于gRPC流量(用于实际有效负载流量)和HTTP流量(用于请求模型元数据)的端口。在运行服务器时只需指定两个端口。