如何将模型预测值限制在范围内?
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
我想用 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