我想用aws sagemaker进行线性回归。我用一些值训练我的模型,并根据输入预测值。但有时它预测值超出范围,因为我预测的百分比不能小于0且大于100.我怎么能在这里限制它:
sess = sagemaker.Session()
linear =
sagemaker.estimator.Estimator(containers[boto3.Session().region_name],
role,
train_instance_count=1,
train_instance_type='ml.c4.xlarge',
output_path='s3://{}/{}/output'.format(bucket, prefix),
sagemaker_session=sess)
linear.set_hyperparameters(feature_dim=5,
mini_batch_size=100,
predictor_type='regressor',
epochs=10,
num_models=32,
loss='absolute_loss')
linear.fit({'train': s3_train_data, 'validation': s3_validation_data})
如何让我的模型不要预测超出范围的值:[0,100]。
答案 0 :(得分:2)
是的,你可以。您可以将output_fn实现为"砖墙"你的输出。在模型返回值之后,SageMaker将调用output_fn以对结果进行任何后处理。 这可以通过创建一个单独的python文件来完成,在那里指定output_fn方法。 在实例化Estimator时提供此python文件。
之类的东西sess = sagemaker.Session()
linear =
sagemaker.estimator.Estimator(containers[boto3.Session().region_name],
role,
train_instance_count=1,
train_instance_type='ml.c4.xlarge',
output_path='s3://{}/{}/output'.format(bucket, prefix),
sagemaker_session=sess)
linear.set_hyperparameters(feature_dim=5,
mini_batch_size=100,
predictor_type='regressor',
epochs=10,
num_models=32,
loss='absolute_loss',
entry_point =' entry.py'
)
linear.fit({'train': s3_train_data, 'validation': s3_validation_data})
您的entry.py看起来像
def output_fn(data, accepts):
"""
Args:
data: A result from TensorFlow Serving
accepts: The Amazon SageMaker InvokeEndpoint Accept value. The content type the response object should be
serialized to.
Returns:
object: The serialized object that will be send to back to the client.
"""
将逻辑实施到"砖墙"这里。
return data.outputs['outputs'].string_val