如何限制范围内的模型预测值?

时间:2018-04-05 12:59:38

标签: amazon-web-services linear-regression amazon-sagemaker

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

1 个答案:

答案 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