无法调用在Sagemaker中创建的XG-Boost端点

我在AWS Sagemaker上训练了一个xgboost模型并创建了一个端点。现在我想使用AWS Lambda和AWS API来调用这个端点。我创建了一个Lambda函数,并添加了下面的代码来处理我的xgboost模型。当我尝试测试时,函数抛出了一个参数验证错误。这是我的代码:

import json
import os
import csv
import io
import boto3

endpointname = os.environ['endpointname'] # 在sagemaker中创建的端点的名称
runtime = boto3.client('runtime.sagemaker')

def lambda_handler(event, context):
    print("Recieved Event: " + json.dumps(event, indent=2))
    data = json.loads(json.dumps(event))
    print(data)
    response = runtime.invoke_endpoint(EndpointName=endpointname, ContentType='text/csv', Body=data)
    print(response)
    result = json.loads(response['Body'].read().decode())
    print(int(float(result))) # sagemaker xgb对测试用例返回的是字节类型

我创建的测试事件是字典类型。函数抛出了 Invalid type for parameter Body, value: {'Time':'7'}, type: <class 'dict'>, valid types: <class 'bytes'>, <class 'bytearray'>, file-like object 的错误。这意味着我应该传递字节或字节数组而不是字典类型的事件。但当我阅读 AWS Lambda文档 时,它说我的事件类型只能是字典、整数、列表、浮点数、字符串或None类型。我按照 这个 AWS文档中的步骤创建了我的Lambda函数。有人能解释一下为什么我的代码会抛出上述错误吗?


回答:

data=json.loads(json.dumps(event)) 是一个冗余操作。data=event 将返回 True。我们为测试用例提供的事件类型是字典。它有一个键值对。键可以是任何东西,值应该是所有预测变量的单一字符串,用逗号分隔。为了预测输出,我们需要测试用例的值。所以声明,例如,payload=data['key'],然后在response中更改Body=payload。这样它就会工作。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注