Postgres调用SageMaker端点传递多维特征数组的问题
解决Postgres RDS调用SageMaker端点传递多维特征数组的问题
问题背景
Python调用SageMaker端点时,传入单组或多组特征的二维数组能正常返回预测结果,但使用Postgres的aws_sagemaker.invoke_endpoint直接传递特征数值时,CloudWatch报错提示模型期望2D数组,实际收到1D数组。
错误原因
Postgres直接传递多个数值参数时,会将其拼接为一维数组,而你的Sklearn模型训练时使用的是二维输入结构(每行对应一个样本),因此需要将Postgres的输入包装成符合要求的二维数组JSON格式。
解决方案
1. 传递单样本
将特征包装为二维数组的JSON字符串,并指定content_type为application/json:
SELECT aws_sagemaker.invoke_endpoint ( 'Custom-sklearn-model-2024-04-04-18-14-53', 'application/json', '[[1454.0, 1.0, 0.5, 1.0, 1.0, 0.0, 34.0, 0.7, 83.0, 4.0, 3.0, 250.0, 1033.0, 3419.0, 7.0, 5.0, 5.0, 1.0, 1.0, 0.0]]' );
2. 传递多样本
同样使用JSON格式传递多维数组,与Python代码中json.dumps(input_data)生成的结构完全一致:
SELECT aws_sagemaker.invoke_endpoint ( 'Custom-sklearn-model-2024-04-04-18-14-53', 'application/json', '[[1454.0, 1.0, 0.5, 1.0, 1.0, 0.0, 34.0, 0.7, 83.0, 4.0, 3.0, 250.0, 1033.0, 3419.0, 7.0, 5.0, 5.0, 1.0, 1.0, 0.0], [1092.0, 1.0, 0.5, 1.0, 10.0, 0.0, 11.0, 0.5, 167.0, 3.0, 14.0, 468.0, 571.0, 737.0, 14.0, 4.0, 11.0, 0.0, 1.0, 0.0]]' );
关键注意事项
- 必须显式指定
content_type为application/json,否则Postgres会使用默认格式传递数据,导致SageMaker端点解析为一维数组。 - 输入特征的顺序必须与模型训练时的特征顺序完全一致,否则会导致预测结果错误。
内容的提问来源于stack exchange,提问作者dayv2005
相关产品推荐
相关产品推荐

