首页
/ Super-Gradients 训练中的 EarlyStop 回调函数使用指南

Super-Gradients 训练中的 EarlyStop 回调函数使用指南

2025-06-11 02:27:38作者:裴锟轩Denise

在使用 Super-Gradients 框架进行模型训练时,EarlyStop 是一个非常有用的回调函数,它可以帮助我们在验证指标不再改善时提前终止训练,从而节省计算资源和时间。本文将详细介绍如何正确配置和使用 EarlyStop 回调函数。

问题背景

在 Super-Gradients 框架中,许多开发者会遇到一个常见错误:当尝试使用 EarlyStop 回调函数时,系统会抛出 AttributeError: 'EarlyStop' object has no attribute 'append' 的错误。这通常是由于回调函数配置不当导致的。

正确配置方法

1. 导入必要的模块

首先需要导入 EarlyStop 类和 Phase 枚举:

from super_gradients.training.utils.early_stopping import EarlyStop
from super_gradients.training.utils.callbacks import Phase

2. 创建 EarlyStop 实例

创建一个 EarlyStop 回调实例,配置相关参数:

early_stop_loss = EarlyStop(
    phase=Phase.VALIDATION_EPOCH_END,  # 在验证阶段结束时检查
    monitor="valid_loss",             # 监控验证损失
    mode="min",                       # 希望损失值越小越好
    min_delta=0.5,                    # 最小改善阈值
    patience=3,                       # 容忍不改善的epoch数
    verbose=True,                     # 打印日志信息
    strict=True,                      # 严格模式
)

3. 将回调函数添加到训练参数

关键点phase_callbacks 参数期望接收一个回调函数的列表,而不是单个回调对象。这是导致上述错误的根本原因。

正确做法是将 EarlyStop 实例放入列表中:

train_params = {
    # 其他训练参数...
    "phase_callbacks": [early_stop_loss],  # 注意这里是列表形式
    # 其他训练参数...
}

参数详解

  1. phase:指定回调函数触发的时机,通常设置为 VALIDATION_EPOCH_END,表示在每个验证周期结束时检查。

  2. monitor:指定要监控的指标名称,如验证损失("valid_loss")或准确率等。

  3. mode:指定监控指标的最优方向:

    • "min":指标越小越好(如损失值)
    • "max":指标越大越好(如准确率)
  4. min_delta:定义"改善"的最小变化量,只有超过这个阈值的变化才被认为是真正的改善。

  5. patience:在触发停止前允许指标不改善的epoch数。

  6. verbose:是否打印详细日志信息。

  7. strict:是否严格检查监控指标是否存在。

使用建议

  1. 对于不同的任务,可能需要调整 min_deltapatience 参数:

    • 对于波动较大的训练过程,可以增大 min_deltapatience
    • 对于稳定的训练过程,可以使用较小的值以便更早停止
  2. 可以同时监控多个指标,创建多个 EarlyStop 实例并都添加到 phase_callbacks 列表中。

  3. EarlyStop 可以与其他回调函数(如模型检查点、学习率调度器等)一起使用,只需将它们都添加到同一个列表中。

通过正确配置 EarlyStop 回调函数,可以有效防止模型过拟合,并在适当的时候终止训练,从而优化训练效率和资源使用。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
596
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K