1

我想用 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]。

4

1 回答 1

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
于 2018-04-05T16:47:04.053 回答