SageMaker线性训练报错:已转float32标签仍提示需float32格式
SageMaker线性学习器训练报错排查:标签格式不匹配问题
问题场景
已将训练数据上传至S3存储桶,转换了特征数据中float64类型的列到float32,随后通过SageMaker定义线性估算器执行训练时出现格式报错。
数据转换代码
float64_cols = list(X_train.select_dtypes(include='float64')) X_train[float64_cols] = X_train[float64_cols].astype('float32')
SageMaker训练代码
linear = sagemaker.estimator.Estimator(container, role, train_instance_count = 1, train_instance_type = 'ml.c4.xlarge', output_path = output_location, sagemaker_session = sagemaker_session) linear.set_hyperparameters(feature_dim = 147, predictor_type = 'regressor', mini_batch_size = 5, epochs = 5, num_models = 32, loss = 'absolute_loss') # pass in the training data from S3 to train the linear learner model linear.fit({'train': s3_train_data})
报错信息
UnexpectedStatusException: Error for Training job linear-learner-2023-02-01-04-16-46-698: Failed. Reason: ClientError: Unable to execute the algorithm. Provided train label is in 'float32' format, 'float32' label is required. Please provide train dataset with 'float32' labels and try again., exit code: 2
问题排查与解决方案
报错信息存在描述矛盾,但结合你的操作流程,核心遗漏点是未处理标签列的格式:
- 你的代码仅对特征矩阵
X_train的float64列做了类型转换,但训练用的标签数据(通常是y_train)可能仍为float64格式,而SageMaker线性学习器要求标签必须是float32。 - 若特征与标签存储在同一个DataFrame中,需确认标签列是否被纳入了
float64_cols的转换范围——如果标签列是float64但未被包含(比如列名筛选遗漏),也会触发该报错。
修复步骤
- 检查标签列的数据类型:
print(y_train.dtype) # 若输出为float64则需要转换 - 将标签列转换为
float32:y_train = y_train.astype('float32') - 若特征与标签在同一DataFrame中,确保标签列被正确转换:
# 假设标签列名为'label' if 'label' in X_train.columns and X_train['label'].dtype == 'float64': X_train['label'] = X_train['label'].astype('float32') - 重新将转换后的完整数据集上传至S3,再执行训练任务。
内容的提问来源于stack exchange,提问作者macromind
相关产品推荐
相关产品推荐

