具有自定义响应结构的Google Cloud ML预测API

时间:2017-04-28 08:43:18

标签: google-cloud-ml

我目前正在探索使用Google Cloud ML托管模型并使用该模型托管预测端点。我还有一点不明白的是关于Prediction API本身的响应格式:

documentation here开始,写入来自API的响应将采用predictions[]的形式,其中包含labelscores字段的对象。我的问题:

  • 是否可以在predictions[]内自定义对象的结构?例如,如果对于给定的实例/数据,我希望预测API返回数字列表或其他可能的结构呢?

  • 如果可能,我应该怎么做(例如,更改我的TensorFlow代码?配置文件?)?

在此之前,我还没有清楚地了解到如果我的TensorFlow模型,Prediction API将如何获得它所给出的响应形式。

谢谢。

1 个答案:

答案 0 :(得分:1)

绝对支持定义您自己的输出。典型的TensorFlow培训计划将:

  1. 构建培训图表
  2. 使用该图表训练模型
  3. 构建预测图
  4. 导出SavedModel
  5. 例如,在此sample code中举例说明。

    构建预测图时,您将为输入创建占位符,例如:

    &posttype=

    当您导出SavedModel时,您可以在所谓的“签名”中声明您的输入和输出;在这个过程中,你给他们友好的名字(字典中的键),因为TensorFlow确实命名为mangling。这些密钥是您在发送数据时在JSON中使用的密钥,它们是您在预测中获得的JSON中的密钥。

    例如:

    with tf.Graph() as prediction_graph:
      # dtypes can be anything
      # First dimension of shape is "batch size" which must be None
      # so the system can send variable-length batches. Beyond that,
      # there are no other restrictions on shape.
      x = tf.placeholder(dtype=tf.int32, shape=(None,))
      y = tf.placeholder(dtype=tf.float32, shape=(None,))
      z = build_prediction_graph(x, y)
      saver = tf.train.Saver()
    

    使用该签名对服务的假设请求可能如下所示:

    # Define the inputs and the outputs.
    inputs = {"x": tf.saved_model.utils.build_tensor_info(x),
              "y": tf.saved_model.utils.build_tensor_info(y)}
    outputs = {"z": tf.saved_model.utils.build_tensor_info(z)}
    signature = tf.saved_model.signature_def_utils.build_signature_def(
        inputs=inputs,
        outputs=outputs,
        method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME
    )
    

    假设的回答如下:

    {"instances": [{"x": 6, "y": 3.14}, {"x": 3, "y": 1.0}]}
    

    最后,您需要实际保存{"predictions": [{"z": [1, 2, 3]}, {"z": [4, 5, 6]}]}

    SavedModel