如何从服务的TensorFlow模型中获取元数据?

约瑟夫基贝

我有一些使用TensorFlow服务运行的模型,我希望这些模型能够自我描述,这样我们调用它们的服务就不需要直接嵌入输入大小之类的东西。(例如,我们希望能够交换模型而无需更新下游系统。)

当使用元数据API时,我会返回一个具有签名定义的响应,但是显然这是无法解释的。该模型有效,所以我很确定这不是模型本身的问题。我还在saved_model_cliTensorFlow模型上试用了该工具,它返回了一个合理的签名定义。

编辑:如果我调用REST API,元数据API也可以正常工作。但是我真的更想弄清楚如何使用gRPC来工作。

编辑,2019年10月21日:我意识到响应中的数据是协议缓冲区编码的消息。如果我理解正确,这意味着我需要使用协议缓冲区数据进行解析。我试过了

from google.protobuf import text_format
text_format.Parse(result.metadata['signature_def'].value,
                  get_model_metadata_pb2.SignatureDefMap) 

但是,这现在返回错误:

ParseError: 2:1 : '>': Expected identifier or number, got >.

较旧的代码:

$ saved_model_cli show --dir mymodel.pb/ --all
MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['input_data'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, -1, 286339)
        name: input:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['output/Softmax:0'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 286338)
        name: output/Softmax:0
  Method name is: tensorflow/serving/predict

和:

from tensorflow_serving.apis import get_model_metadata_pb2
import grpc
import tensorflow as tf
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2_grpc
from tensorflow.contrib import util

MODEL_URI = '10.100.55.9:8500'
channel = grpc.insecure_channel(MODEL_URI)
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)

request = get_model_metadata_pb2.GetModelMetadataRequest()
request.model_spec.name = 'themodel'
request.model_spec.signature_name = 'serving_default'
request.metadata_field.append('signature_def')
result = stub.GetModelMetadata(request, 1.0)

哪个返回

In [5]: result.metadata['signature_def']                                                                                                                                             
Out[5]: 
type_url: "type.googleapis.com/tensorflow.serving.SignatureDefMap"
value: "\n>\n\025__saved_model_init_op\022%\022#\n\025__saved_model_init_op\022\n\n\004NoOp\032\002\030\001\n\271\001\n\017serving_default\022\245\001\nJ\n\007input_1\022?\n\031serving_default_input_1:0\020\001\032 \022\013\010\377\377\377\377\377\377\377\377\377\001\022\013\010\377\377\377\377\377\377\377\377\377\001\022\004\010\224\261\021\022;\n\005dense\0222\n\031StatefulPartitionedCall:0\020\001\032\023\022\013\010\377\377\377\377\377\377\377\377\377\001\022\004\010\223\261\021\032\032tensorflow/serving/predict"
约瑟夫基贝

我终于自己弄明白了。可能有一种更优雅的方法来执行此操作,该方法只需要解析我想要的响应部分,而无需转换为JSON然后转换为Python对象来获取所需部分。但这有效,因此我将其发布。

通过对REST API代码进行反向工程,我发现Protocol Buffer库中有一个不错的实用程序功能,可以将Protocol Buffer格式转换为JSON,然后可以通过您选择的Python JSON解析器对其进行解析。

from google.protobuf.json_format import MessageToJson
import simplejson as json

parsed = json.loads(MessageToJson(result))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从IEnumerable获取模型元数据?

如何从服务中获取数据?

从 Java 中的 Tensorflow 服务模型获取矩阵响应

如何通过API或SQL查询获取模型元数据

如何从retrieveSetupIntent 中获取元数据对象?

如何从 Pandas DataMatrix 中获取元数据

如何从模型文件中获取数据?

如何从与模型相关的列中获取数据?

如何从Django中的模型对象获取数据

渠道工厂如何获取WCF服务元数据

如何获取元数据?

如何从Mule中的Web服务获取数据

如何从 angular 6 的服务中获取数据?

如何从Android中的Web服务获取数据?

如何从返回模型的服务中获取类函数

如何从linq数据库模型中获取数据

如何使用JavaScript从数据库/模型中获取数据

如何在Dart中从元数据中获取价值?

如何从模型中的单个记录中获取数据对象?

如何从Django Rest Framework中的相关模型中获取数据?

如何从节点快递中的模型中获取数据?

模型的输出张量必须是模型 Api Tensorfow 中 TensorFlow `Layer`(因此保存过去的层元数据)的输出

jpa元模型如何获取表名

如何从流中获取 SHOUTcast“正在播放”的元数据?

如何从 ACF 图库图像中获取图像元数据?

如何使用LinkPresentation在SwiftUI中获取链接元数据?

如何禁用仅获取路由 OData 中的元数据

如何从powershell获取SharePoint中的元数据(列值)

如何在WooCommerce 3中获取订单嵌套的元数据