Как развернуть конечную точку прогнозирования рака молочной железы, созданную AWS Sagemaker, с использованием Lambda и API-шлюза?

Я пытаюсь развернуть существующую модель прогнозирования рака молочной железы на Amazon Sagemanker, используя AWS Lambda и API-шлюз. Я следовал за официальной документацией от нижеуказанного URL.

https://aws.amazon.com/blogs/machine-learning/call-an-amazon-sagemaker-model-endpoint-using-amazon-api-gateway-and-aws-lambda/

Я получаю ошибку типа в "предиката".

 result = json.loads(response['Body'].read().decode())
    print(result)
    pred = int(result['predictions'][0]['predicted_label'])
    predicted_label = 'M' if pred == 1 else 'B'

    return predicted_label

пожалуйста, дайте мне знать, если кто-то может решить эту проблему. Спасибо.

1 ответ

Решение

Печатая тип результата print(type(result)) Вы можете увидеть его словарь. теперь вы можете видеть, что имя ключа - "оценка" вместо "предикатная метка", которую вы даете преду. Следовательно, замените его

pred = int(result['predictions'][0]['score'])

Я думаю, что это решает вашу проблему.

вот моя лямбда-функция:

import os
import io
import boto3
import json
import csv

# grab environment variables
ENDPOINT_NAME = os.environ['ENDPOINT_NAME']
runtime= boto3.client('runtime.sagemaker')

def lambda_handler(event, context):
   print("Received event: " + json.dumps(event, indent=2))

   data = json.loads(json.dumps(event))
   payload = data['data']
   print(payload)

   response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                      ContentType='text/csv',
                                      Body=payload)
   #print(response)
   print(type(response))
   for key,value in response.items():
       print(key,value)
   result = json.loads(response['Body'].read().decode())
   print(type(result))
   print(result['predictions'])
   pred = int(result['predictions'][0]['score'])
   print(pred)
   predicted_label = 'M' if pred == 1 else 'B'

   return predicted_label
Другие вопросы по тегам