本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
定义指标
当您使用亚马逊之一时 SageMaker 内置算法,您无需定义指标。内置算法自动将指标发送到超参数优化。您需要选择内置算法发出的指标之一作为优化作业的目标指标。有关内置算法发出的指标的列表,请参阅中列出的相应算法的模型调整部分使用 Amazon SageMaker 内置算法或预训练模型.
要针对机器学习模型优化超参数,优化作业使用训练算法写入日志的指标来评估所启动的训练作业。亚马逊 SageMaker 超参数调整解析算法的stdout
和stderr
用于查找算法指标(例如丢失或验证准确度)的流,这些指标显示了模型在数据集上的性能
这些是相同的指标 SageMaker 发送到 CloudWatch 日志。有关更多信息,请参阅 使用 Amazon CloudWatch 记录 Amazon SageMaker 事件。
如果使用自己的算法进行超参数优化,请确保您的算法通过将评估数据写入 stderr
或 stdout
,至少发出一个指标。
超参数优化将一个额外的超参数 _tuning_objective_metric
发送到训练算法。此超参数指定要用于超参数优化作业的目标指标,以便在训练期间您的算法可以使用该信息。
您可为优化作业定义最多 20 个要监控的指标。您选择这些指标之一作为目标指标,超参数优化使用该指标来评估训练作业。训练作业在得到了目标指标最佳值时,超参数优化作业返回该作业作为最佳训练作业。
您通过为优化作业所监控的各个指标指定名称和正则表达式,定义优化作业的指标。设计正则表达式以捕获您的算法发出的指标值。您将指标传递到 CreateHyperParameterTuningJob
操作中的 TrainingJobDefinition
参数,作为 AlgorithmSpecification
字段的 MetricDefinitions
字段。
下面的示例定义了 4 个指标:
=[ { "Name": "loss", "Regex": "Loss = (.*?);", }, { "Name": "ganloss", "Regex": "GAN_loss=(.*?);", }, { "Name": "discloss", "Regex": "disc_train_loss=(.*?);", }, { "Name": "disc-combined", "Regex": "disc-combined=(.*?);", }, ]
下面是该算法写入的日志的示例:
GAN_loss=0.138318; Scaled_reg=2.654134; disc:[-0.017371,0.102429] real 93.3% gen 0.0% disc-combined=0.000000; disc_train_loss=1.374587; Loss = 16.020744; Iteration 0 took 0.704s; Elapsed=0s
使用正则表达式 (regex) 匹配算法的日志输出并捕获指标的数值。例如,在上面定义的 loss
指标的正则表达式中,正则表达式的第一部分查找完全匹配的文本“Loss = ”,表达式 (.*?);
捕获零个或多个任意字符,直到遇到第一个分号字符为止。在此表达式中,括号告诉正则表达式捕获括号内的内容,.
表示任何字符,*
表示零或更多个字符,?
表示仅捕获到遇到 ;
字符的第一个实例为止。
选择您定义的指标之一作为优化作业的目标指标。如果您在使用 API,则在发送到 CreateHyperParameterTuningJob
操作的 HyperParameterTuningJobConfig
参数的 HyperParameterTuningJobObjective
字段中指定 name
键的值。