我目前正在探索使用Google Cloud ML托管模型并使用该模型托管预测端点。我还有一点不明白的是关于Prediction API本身的响应格式:
从documentation here开始,写入来自API的响应将采用predictions[]
的形式,其中包含label
和scores
字段的对象。我的问题:
是否可以在predictions[]
内自定义对象的结构?例如,如果对于给定的实例/数据,我希望预测API返回数字列表或其他可能的结构呢?
如果可能,我应该怎么做(例如,更改我的TensorFlow代码?配置文件?)?
在此之前,我还没有清楚地了解到如果我的TensorFlow模型,Prediction API将如何获得它所给出的响应形式。
谢谢。
答案 0 :(得分:1)
绝对支持定义您自己的输出。典型的TensorFlow培训计划将:
例如,在此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