TensorFlow 服务:获取输入形状和标签
TensorFlow serving: get input shape and labels
我目前正在尝试设置一个 TensorFlow Serving 客户端,其任务是处理以下格式的消息队列:
{
"model_url":"http://path/to/some/model",
"image_url":"http://path/to/some/image"
}
换句话说,每条消息都说明应该使用哪个模型预测哪个图像。理想情况下,我不必在队列中指定任何进一步的信息来使其工作。
虽然有两个问题。输入图像的大小可能会有所不同,而预期的输入大小是固定的(由模型确定)。所以客户端必须调整图像的版本。为此,它必须知道预期的输入大小是多少。
所以我的具体问题是:如果我知道model_url
,有没有办法向 TensorFlow Serving 服务器发出请求,以便它告诉我预期的输入形状是什么样的?类似地,我需要知道与模型提供的预测相关联的标签(例如 "cat"、"dog" 等,如果我们正在进行图像分类)。
我正在寻找的是以下伪代码:
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"]
是的,您可以通过向 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(在 'metadata API' 下)。还知道可以同时公开 gRPC 流量(用于实际负载流量)和 HTTP 流量(请求模型元数据)的端口。当 运行 服务器时,只需指定两个端口。
我目前正在尝试设置一个 TensorFlow Serving 客户端,其任务是处理以下格式的消息队列:
{
"model_url":"http://path/to/some/model",
"image_url":"http://path/to/some/image"
}
换句话说,每条消息都说明应该使用哪个模型预测哪个图像。理想情况下,我不必在队列中指定任何进一步的信息来使其工作。
虽然有两个问题。输入图像的大小可能会有所不同,而预期的输入大小是固定的(由模型确定)。所以客户端必须调整图像的版本。为此,它必须知道预期的输入大小是多少。
所以我的具体问题是:如果我知道model_url
,有没有办法向 TensorFlow Serving 服务器发出请求,以便它告诉我预期的输入形状是什么样的?类似地,我需要知道与模型提供的预测相关联的标签(例如 "cat"、"dog" 等,如果我们正在进行图像分类)。
我正在寻找的是以下伪代码:
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"]
是的,您可以通过向 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(在 'metadata API' 下)。还知道可以同时公开 gRPC 流量(用于实际负载流量)和 HTTP 流量(请求模型元数据)的端口。当 运行 服务器时,只需指定两个端口。