You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SageMaker训练:如何编写正则表达式正确捕获含指数形式的指标?

解决CloudWatch中metric_definitions正则无法捕获科学计数法(如e-0x)的问题

原Stack Overflow帖子里推荐的metric_definitions正则存在缺陷,没法完整捕获带e-0x这类指数的科学计数法数值——比如loss实际一直在下降,但CloudWatch只抓到了数值的前半部分,导致指标显示上下波动,完全反映不出模型真实的学习状态。

原正则的问题

原正则'loss': ([0-9]+(.|e\-)[0-9]+),?的问题很明显:

  • 只能匹配一次小数点或e-,碰到1.23e-04这种完整的科学计数法,只能抓到1.23e-0,后面的数字直接丢了
  • 没考虑纯整数、纯小数的情况,覆盖范围太窄
  • 里面的.没转义,会匹配任意字符,容易误抓无关内容

修正后的正则方案

改用兼容CloudWatch RE2引擎的正则,能完整匹配整数、小数、科学计数法三种数值格式:

metric_definitions = [
    {'Name': 'loss', 'Regex': "'loss': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'learning_rate', 'Regex': "'learning_rate': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'eval_loss', 'Regex': "'eval_loss': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'eval_accuracy', 'Regex': "'eval_accuracy': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'eval_f1', 'Regex': "'eval_f1': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'eval_precision', 'Regex': "'eval_precision': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'eval_recall', 'Regex': "'eval_recall': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'eval_runtime', 'Regex': "'eval_runtime': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'eval_samples_per_second', 'Regex': "'eval_samples_per_second': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"},
    {'Name': 'epoch', 'Regex': "'epoch': ([+-]?\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?"}
]

为什么之前的变体在regexr有效但CloudWatch不行?

regexr用的是JavaScript正则引擎,和CloudWatch用的RE2引擎语法不完全兼容——比如你之前试的.*贪婪匹配在RE2里可能会导致捕获逻辑异常,而且RE2对某些语法有严格限制,必须用它支持的标准正则语法才能正常工作。

内容的提问来源于stack exchange,提问作者Yoan B. M.Sc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:33:11