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

How to restrict model predicted value within range?

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

是的,你可以。您可以实现 output_fn 到 "brick wall" 您的输出。 SageMaker 会在模型 returns 值之后调用 output_fn 来执行任何 post-processing 结果。 这可以通过创建一个单独的 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.

    """    

Implement the logic to "brick wall" here.

    return data.outputs['outputs'].string_val