簡體   English   中英

SageMaker 批量轉換:無法將字符串轉換為浮點“*”

[英]SageMaker Batch Transform: Could not convert string to float '*'

您好,感謝您的閱讀。 簡而言之,我想對我使用 SageMaker Experiments 制作的 XGBoost model 執行批量轉換。 I trained my model on csv data stored in S3, deployed an endpoint for my model, successfully hit said endpoint with single csv lines and got back expected inferences.

(在開始進行批量轉換之前,我完全按照本教程進行操作)

現在我正在嘗試使用從上述教程創建的 model 運行批量轉換,我遇到了一個錯誤(跳到底部查看我的錯誤日志)。 在我直接解決錯誤之前,我想展示我的批量轉換代碼。

(從 SageMaker SDK v2.24.4 導入)


import sagemaker
import boto3
from sagemaker import get_execution_role
from sagemaker.model import Model

region = boto3.Session().region_name
role = get_execution_role()

image = sagemaker.image_uris.retrieve('xgboost', region, '1.2-1')
model_location = '{mys3info}/output/model.tar.gz'
model = Model(image_uri=image,
              model_data=model_location,
              role=role,
             )

transformer = model.transformer(instance_count=1,
                 instance_type='ml.m5.xlarge',
                 strategy='MultiRecord',
                 assemble_with='Line',
                 output_path='myOutputPath',
                 accept='text/csv',
                 max_concurrent_transforms=1,
                 max_payload=20)

transformer.transform(data='s3://test-s3-prefix/short_test_data.csv',
                      content_type='text/csv',
                      split_type='Line',
                      join_source='Input'
                     )
transformer.wait()

short_test_data.csv

33,entrepreneur,married,secondary,no,2,yes,yes,unknown,5,may,76,1,-1,0,unknown
47,blue-collar,married,unknown,no,1506,yes,no,unknown,5,may,92,1,-1,0,unknown
33,unknown,single,unknown,no,1,no,no,unknown,5,may,198,1,-1,0,unknown
35,management,married,tertiary,no,231,yes,no,unknown,5,may,139,1,-1,0,unknown
57,blue-collar,married,primary,no,52,yes,no,unknown,5,may,38,1,-1,0,unknown
32,blue-collar,single,primary,no,23,yes,yes,unknown,5,may,160,1,-1,0,unknown
53,technician,married,secondary,no,-3,no,no,unknown,5,may,1666,1,-1,0,unknown
29,management,single,tertiary,no,0,yes,no,unknown,5,may,363,1,-1,0,unknown
32,management,married,tertiary,no,0,yes,no,unknown,5,may,179,1,-1,0,unknown
38,management,single,tertiary,no,424,yes,no,unknown,5,may,104,1,-1,0,unknown

我在命令行中使用原始數據集通過運行以下命令制作了上述 csv 測試數據:

head original_training_data.csv > short_test_data.csv

然后我手動將它上傳到我的 S3 存儲桶。


日志

[sagemaker logs]: MaxConcurrentTransforms=1, MaxPayloadInMB=20, BatchStrategy=MULTI_RECORD
[sagemaker logs]: */short_test_data.csv: ClientError: 415
[sagemaker logs]: */short_test_data.csv: 
[sagemaker logs]: */short_test_data.csv: Message:
[sagemaker logs]: */short_test_data.csv: Loading csv data failed with Exception, please ensure data is in csv format:
[sagemaker logs]: */short_test_data.csv:  <class 'ValueError'>
[sagemaker logs]: */short_test_data.csv:  could not convert string to float: 'entrepreneur'

我了解單熱編碼的概念和其他將字符串轉換為數字以供 XGBoost 等算法使用的方法。 我的問題是,我可以輕松地將完全相同格式的數據輸入到已部署的端點中,並在不進行該級別編碼的情況下獲取結果。 我顯然錯過了一些東西,所以非常感謝任何幫助!

您的 Batch Transform 代碼很好,沒有發出任何警報,但查看錯誤消息,顯然是輸入格式錯誤。 聽起來很傻。 我建議您使用pandas從驗證集中保存 test_data 以確保格式正確。

你可以做這樣的事情 -

data = pd.read_csv("file")
#specify columns to save from ectracted df
data.columns["choose columns"] 
# save the data to csv
data.to_csv("data.csv", sep=',', index=False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM