从AWS SageMaker解析boto3 invoke_endpoint响应

时间:2019-02-22 04:13:48

标签: parsing boto3

我有一个Sagemaker端点,可以从boto3客户端推断出该端点并获得响应。

boto3 doc,响应结果的BodyByte对象StreamingBody类型。我将其转换为字典

    response = client.invoke_endpoint(EndpointName=endpoint_name, Body=json.dumps(data))
response_body = response['Body']
dict_response = response_body.read().decode('utf-8')
print(dict_response)

上面的代码给了我类似下面的响应(这篇文章被精简)

我需要从“ floatVal”键中检索数组。我该怎么办?

{
  "outputs": {
    "score": {
      "dtype": "DT_FLOAT",
      "floatVal": [
        0.00012408883776515722,
        ...........
        -0.8316119909286499,
        -0.24423488974571228
      ],
      "tensorShape": {
        "dim": [
          {
            "size": "1"
          },
          {
            "size": "1024"
          }
        ]
      }
    }
  },
  "modelSpec": {
    "version": "1",
    "name": "generic_model",
    "signatureName": "serving_default"
  }
}

1 个答案:

答案 0 :(得分:0)

实际上,dict_response在这里实际上不是dictionary,而是string类型。因此,我不得不将dict_response转换为实际的词典,然后才能检索floatVal键。

更新的代码

response = client.invoke_endpoint(EndpointName=endpoint_name, Body=json.dumps(data))
response_body = response['Body']
response_str = response_body.read().decode('utf-8')
response_dict = eval(response_str)
print(response_dict['outputs']['score']['floatVal'])