代码之家  ›  专栏  ›  技术社区  ›  Dheeraj Inampudi

如何使用Lambda和API网关部署AWS Sagemaker创建的乳腺癌预测端点?

  •  0
  • Dheeraj Inampudi  · 技术社区  · 7 年前

    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 回复  |  直到 6 年前
        1
  •  3
  •   dc7    7 年前

    print(type(result)) 你可以看到它是一本字典。现在您可以看到关键字名称是“score”,而不是您要给pred的“predicted\u label”。因此,将其替换为

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

    这是我的lambda函数:

    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