定义指标 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

定义指标

注意

在使用 Amazon SageMaker 内置算法之一时,您无需定义指标。内置算法自动将指标发送到超参数优化。您需要选择内置算法发出的指标之一作为优化作业的目标指标。有关内置算法发出的指标的列表,请参阅 中算法的指标使用 Amazon SageMaker 内置算法

要针对机器学习模型优化超参数,优化作业使用训练算法写入日志的指标来评估所启动的训练作业。Amazon SageMaker 超参数优化解析您算法的 stdoutstderr 流以查找说明模型在数据集上表现如何的算法指标,例如损失或验证准确率

注意

这些是 SageMaker 发送到 CloudWatch Logs 的相同指标。有关更多信息,请参阅使用 Amazon SageMaker 记录事件 Amazon CloudWatch

如果使用自己的算法进行超参数优化,请确保您的算法通过将评估数据写入 或 stderr,至少发出一个指标stdout

注意

超参数优化将一个额外的超参数 _tuning_objective_metric 发送到训练算法。此超参数指定要用于超参数优化作业的目标指标,以便在训练期间您的算法可以使用该信息。

您可为优化作业定义最多 20 个要监控的指标。您选择这些指标之一作为目标指标,超参数优化使用该指标来评估训练作业。训练作业在得到了目标指标最佳值时,超参数优化作业返回该作业作为最佳训练作业。

您通过为优化作业所监控的各个指标指定名称和正则表达式,定义优化作业的指标。设计正则表达式以捕获您的算法发出的指标值。您将指标传递到 CreateHyperParameterTuningJob 操作中的 TrainingJobDefinition 参数,作为 MetricDefinitions 字段的 AlgorithmSpecification 字段。

下面的示例定义了 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,请在发送到 name HyperParameterTuningJobObjectiveHyperParameterTuningJobConfig 操作的 参数的 CreateHyperParameterTuningJob 字段中指定 键的值。