Tensorflow Serving:GetModelMetaData 和 tf.example 输入节点的自动配置



我正在用C++编写一个TensorFlow Serve客户端,它位于数据库服务器内部,并使TensorFlow模型可用作数据库过程。整个机器根据它通过 GetModelMetaData 请求/响应机制从 TensorFlow 服务模型服务器检索的响应,自动配置数据类型以及数据库表和输入和输出张量之间的必要转换。

到目前为止,我已经使用"原始"输入张量与各种模型(Inception_v3,各种回归模型(进行对话。通过"原始",我的意思是输入张量的值是模型请求的纯数据类型,而不是包装为 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"
}
}
}
}
}

虽然我可以自动推断出要为明确指定的"原始"张量(即浮点数向量(创建什么张量,但我没有好方法弄清楚要放入"classify_x_to_y"签名想要的序列化 tf.example 记录中的内容(阅读文本描述我当然知道它想要一个在键"x"下带有浮点值的 tf.example, 问题是,如何从上面的GetModelMetaDataResponse中自动推断出来?

Tensorflow 服务支持不同的推理 API,例如 Classify、Regress 和 Predict (https://github.com/tensorflow/serving/blob/master/tensorflow_serving/apis/prediction_service.proto(。 - "serving_default"签名用于预测 API(方法名称为"tensorflow/serving/predict"(。预测 API 是面向张量的,因此您可以推断要创建的张量。 - "classify_x_to_y"签名用于分类 API(方法名称为"tensorflow/serving/classify"(。分类 API 使用 tf。示例,您需要知道 tf 中应包含哪些功能。例。如果您有权访问模型导出(即 SavedModel(,则可以推断出该信息,但仅从签名中无法分辨出它。 - 回归类似于分类。

是否可以控制模型以始终导出预测签名并仅使用预测 API 进行推理?预测是比分类和回归更低的级别 API,它应该支持分类和回归(以及更多(支持的所有功能。

最新更新