代码之家  ›  专栏  ›  技术社区  ›  Karl

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

  •  1
  • Karl  · 技术社区  · 7 年前

    我目前正在尝试设置一个TensorFlow服务客户端,该客户端的任务是处理以下格式的消息队列:

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

    换言之,每条消息都表示应该使用哪个模型预测哪个图像。理想情况下,我不需要在队列中指定任何进一步的信息,这样就可以工作了。

    但有两个问题。输入图像的大小可能会有所不同,而预期的输入大小是固定的(由模型确定)。因此客户端必须调整图像的版本大小。为此,它必须知道预期的输入大小。

    所以我的具体问题是 如果我知道 model_url ,是否有方法向TensorFlow服务服务器发出请求,以便它告诉我预期的输入形状是什么样的?同样,我需要知道与模型提供的预测相关的标签(例如,如果我们进行图像分类,则为“猫”、“狗”等)。

    我要找的是以下伪代码行:

    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 回复  |  直到 7 年前
        1
  •  2
  •   Karl    7 年前

    是的,通过将请求发送到 /metadata tf服务器的路径。

    最简单的形式是:

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

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

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