我正在用C ++编写一个TensorFlow Serving客户端,它位于数据库服务器内,并使TensorFlow模型可用作数据库程序。整个机器根据它通过GetModelMetaData请求/响应机制从TensorFlow服务模型服务器检索的响应,自动配置数据库表和输入和输出张量之间的数据类型和必要的转换。
到目前为止,我已经使用“原始”输入张量与各种模型进行对话(Inception_v3,各种回归模型)。 “raw”是指输入张量的值是模型请求的纯数据类型,而不是包含为tf.example记录的值。
为了说明,查看TensorFlow服务示例部分中的“half_plus_two”模型。它期望一个“x”浮点输入并返回一个“y”浮点输出。它在“serving_default”签名中具有“原始”输入模式,在“classify_x_to_y”签名中具有“包裹”输入模式:(摘自GetModelMetaData响应):
Model Metadata:
model_spec {
name: "multisig"
version {
value: 1
}
}
metadata {
key: "signature_def"
value {
[type.googleapis.com/tensorflow.serving.SignatureDefMap] {
signature_def {
key: "classify_x_to_y"
value {
inputs {
key: "inputs"
value {
name: "tf_example:0"
dtype: DT_STRING
tensor_shape {
unknown_rank: true
}
}
}
outputs {
key: "scores"
value {
name: "y:0"
dtype: DT_FLOAT
tensor_shape {
dim {
size: -1
}
dim {
size: 1
}
}
}
}
method_name: "tensorflow/serving/classify"
}
}
signature_def {
key: "serving_default"
value {
inputs {
key: "x"
value {
name: "x:0"
dtype: DT_FLOAT
tensor_shape {
dim {
size: -1
}
dim {
size: 1
}
}
}
}
outputs {
key: "y"
value {
name: "y:0"
dtype: DT_FLOAT
tensor_shape {
dim {
size: -1
}
dim {
size: 1
}
}
}
}
method_name: "tensorflow/serving/predict"
}
}
}
}
}
虽然我可以自动推导出为明确指定的“原始”张量(即浮点数向量)创建的张量,但是我没有办法找出将序列化的tf.example记录放入“classify_x_to_y”的内容。 “签名想要(阅读我知道的文本描述,当然它想要一个带有浮点值的tf.example在键'x'下,问题是,如何从上面的GetModelMetaDataResponse中自动推导出它?
答案 0 :(得分:0)
Tensorflow服务支持不同的推理API,例如,Classify,Regress和Predict(https://github.com/tensorflow/serving/blob/master/tensorflow_serving/apis/prediction_service.proto)。 - " serving_default"签名用于Predict API(方法名称" tensorflow / serving / predict")。 Predict API是面向张量的,因此您可以推断出要创建的张量。 - " classify_x_to_y"签名用于Classify API(方法名称为" tensorflow / serving / classify")。 Classify API使用tf.Example,您需要知道tf.Example中应包含哪些功能。如果您可以访问模型导出(即SavedModel),则可以推断出该信息,但您无法仅通过签名来告知它。 - 回归类似于分类。
您是否可以控制模型以始终导出预测签名并仅使用Predict API进行推断? Predict是一个比Classify和Regress更低级的API,它应该支持Classify和Regress支持的所有功能(以及更多)。