如何在sagemaker中进行预测之前预处理输入数据?

时间:2018-03-30 20:40:07

标签: aws-java-sdk amazon-sagemaker

我使用java Sagemaker SDK调用Sagemaker端点。我发送的数据在模型可以用于预测之前几乎不需要清理。我怎样才能在Sagemaker中做到这一点。

我在Jupyter笔记本实例中有一个预处理功能,它在传递数据之前清理训练数据以训练模型。现在我想知道我是否可以在调用端点时使用该功能,或者该功能是否已被使用? 如果有人想要,我可以展示我的代码吗?

编辑1 基本上,在预处理中,我正在进行标签编码。这是我的预处理功能

def preprocess_data(data):
 print("entering preprocess fn")
 # convert document id & type to labels
 le1 = preprocessing.LabelEncoder()
 le1.fit(data["documentId"])
 data["documentId"]=le1.transform(data["documentId"])
 le2 = preprocessing.LabelEncoder()
 le2.fit(data["documentType"])
 data["documentType"]=le2.transform(data["documentType"])
 print("exiting preprocess fn")
 return data,le1,le2

这里'数据'是一个pandas数据帧。

现在我想在调用端点时使用这些le1,le2。我想在sagemaker本身进行预处理而不是在我的java代码中。

4 个答案:

答案 0 :(得分:2)

一种选择是将预处理代码作为AWS Lambda函数的一部分,并在预处理完成后使用该Lambda调用SageMaker的调用端点。 AWS Lambda支持Python,并且应该很容易拥有与Jupyter笔记本中相同的代码,也就是在Lambda函数中。您还可以使用该Lambda调用外部服务(如DynamoDB)以查找数据丰富。

您可以在SageMaker文档中找到更多信息:https://docs.aws.amazon.com/sagemaker/latest/dg/getting-started-client-app.html

答案 1 :(得分:2)

SageMaker中现在有一个新功能,称为推理管道。这使您可以构建一个线性序列,包含两个到五个容器,用于预处理/后期处理请求。然后将整个管道部署在单个端点上。

https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html

答案 2 :(得分:1)

您需要编写脚本并在创建模型时提供该脚本。该脚本将有一个input_fn,您可以在其中进行预处理。 有关更多详细信息,请参阅aws文档。

https://docs.aws.amazon.com/sagemaker/latest/dg/mxnet-training-inference-code-template.html

答案 3 :(得分:0)