Разбор ответа boto3 invoke_endpoint от AWS SageMaker - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть конечная точка Sagemaker, которую я могу вывести из клиента boto3 и получить ответ.

За boto3 doc , Body результата ответа имеет тип Byte object 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 голосов
/ 22 февраля 2019

На самом деле 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'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...