

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 提前停止训练作业
<a name="automatic-model-tuning-early-stopping"></a>

在按照目标指标进行衡量时，如果训练作业未能明显改进，则可提前停止超参数调优作业启动的训练作业。提前停止训练作业有助于减少计算时间，并帮助避免模型过度拟合。要配置超参数调优作业以提前停止训练作业，请执行以下操作之一：
+ 如果您使用的是 Amazon 适用于 Python 的 SDK (Boto3)，请将用于配置`TrainingJobEarlyStoppingType`调优作业的[https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html)对象的字段设置为。`AUTO`
+ 如果您使用的是 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)，请将[HyperParameterTuner](https://sagemaker.readthedocs.io/en/stable/tuner.html)对象的`early_stopping_type`参数设置为`Auto`。
+ 在 Amazon SageMaker AI 控制台的**创建超参数调整任务工作**流程中，在 “**提前停止**” 下，选择 “**自动**”。

****有关演示如何使用提前停止的示例笔记本，请参阅 [https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter\$1tuning/image\$1classification\$1early\$1stopping/hpo\$1image\$1classition\$1early\$1stopping.ipynb](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning/image_classification_early_stopping/hpo_image_classification_early_stopping.ipynb)，或者在笔记本实例中 AI 示例的 “超参数调整” 部分中打开`hpo_image_classification_early_stopping.ipynb`笔记本。SageMaker ****

## 提前停止的工作原理
<a name="automatic-tuning-early-stop-how"></a>

当你为超参数调整作业启用提早停止时， SageMaker AI 会按如下方式评估超参数调整作业启动的每个训练作业：
+ 在每个训练周期结束后，获取对象指标的值。
+ 计算直至当前周期的所有之前训练作业的目标指标运行平均值，然后计算所有运行平均值的中值。
+ 如果当前训练作业的目标指标值差（最小化时更高，或者在最大化目标指标时更低）比在同一时期之前的训练作业的目标指标的运行平均值中位数差， SageMaker AI 将停止当前的训练作业。

## 支持提前停止的算法
<a name="automatic-tuning-early-stopping-algos"></a>

要支持提前停止，算法必须为每个周期发出目标指标。以下内置的 SageMaker AI 算法支持提前停止：
+ [LightGBM](lightgbm.md)
+ [CatBoost](catboost.md)
+ [AutoGluon-表格](autogluon-tabular.md)
+ [TabTransformer](tabtransformer.md)
+ [线性学习器算法](linear-learner.md) – 仅当使用 `objective_loss` 作为目标指标时支持。
+ [XGBoost 使用 Amazon A SageMaker I 的算法](xgboost.md)
+ [图像分类- MXNet](image-classification.md)
+ [物体检测- MXNet](object-detection.md)
+ [Sequence-to-Sequence 算法](seq-2-seq.md)
+ [IP 洞察](ip-insights.md)

**注意**  
当前支持提前停止的内置算法列表截止到 2018 年 12 月 13 日。之后其他内置算法可能会支持提前停止。如果算法发出的指标可用作超参数调优作业的目标指标（最好是验证指标），则它支持提前停止。

要在您自己的算法中使用提前停止，您编写的算法必须在每个周期后发出目标指标的值。以下列表演示了如何在不同框架中实现这一点：

TensorFlow  
使用 `tf.keras.callbacks.ProgbarLogger` 类。有关信息，请参阅 [tf.keras.callbacks。 ProgbarLogger API](https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/ProgbarLogger)。

MXNet  
使用 `mxnet.callback.LogValidationMetricsCallback`。有关信息，请参阅 [mxnet APIs](https://mxnet.apache.org/versions/master/api/python/docs/api/legacy/callback/index.html) .callback。

Chainer  
使用 `extensions.Evaluator` 类扩展 chainer。有关信息，请参阅 [chainer.training.extensions.Evaluator API](https://docs.chainer.org/en/v1.24.0/reference/extensions.html#evaluator)。

PyTorch 还有 Spark  
没有高级支持。您必须明确编写训练代码，以便其计算目标指标并在每个周期之后写入日志。