【PL 基础】如何启用早停机制

  • 摘要
  • 1. on_train_batch_start()
  • 2. EarlyStopping Callback

摘要

  本文介绍了两种在 PyTorch Lightning 中实现早停机制的方法。第一种是通过重写on_train_batch_start()方法手动控制训练流程;第二种是使用内置的EarlyStopping回调,可以监控验证指标并在指标停止改善时自动停止训练。文章详细说明了EarlyStopping的参数设置,包括监控指标、模式选择、耐心值等核心参数,以及停止阈值、发散阈值等进阶参数。同时介绍了如何通过子类化修改早停触发时机,并提醒注意验证频率与耐心值的配合使用。文末提供了完整的代码示例,展示了如何在实际训练中配置和使用早停机制。

1. on_train_batch_start()

  通过重写 on_train_batch_start() 方法,在满足特定条件时提前返回,从而停止并跳过当前epoch的剩余训练批次。

  如果对于最初要求的每个epoch重复这样做,将停止整个训练。

2. EarlyStopping Callback

  EarlyStopping 回调可用于监控指标,并在没有观察到改善时停止训练。

要启用此功能,请执行以下操作:

  • 导入 EarlyStopping 回调模块;

  • 使用 log() 方法记录需要监控的指标;

  • 初始化回调并设置要监控的指标名称(monitor 参数);

  • 根据指标特性设置监控模式(mode 参数);

  • EarlyStopping 回调传递给 Trainercallbacks 参数。

from lightning.pytorch.callbacks.early_stopping import EarlyStoppingclass LitModel(LightningModule):def validation_step(self, batch, batch_idx):loss = ...self.log("val_loss", loss)model = LitModel()
trainer = Trainer(callbacks=[EarlyStopping(monitor="val_loss", mode="min")])
trainer.fit(model)

可以通过更改其参数来自定义回调行为。

early_stop_callback = EarlyStopping(monitor="val_accuracy", min_delta=0.00, patience=3, verbose=False, mode="max")
trainer = Trainer(callbacks=[early_stop_callback])

用于在极值点停止训练的附加参数:

  • stopping_threshold(停止阈值):当监控指标达到该阈值时立即终止训练。适用于已知超过特定最优值后模型不再提升的场景。

  • divergence_threshold(发散阈值):当监控指标劣化至该阈值时即刻停止训练。当指标恶化至此程度时,我们认为模型已无法恢复,此时应提前终止并尝试不同初始条件。

  • check_finite(有限值检测):启用后,若监控指标出现NaN(非数值)或无穷大时终止训练。

  • check_on_train_epoch_end(训练周期结束检测):启用后,在训练周期结束时检查指标。仅当监控指标通过周期级训练钩子记录时才需启用此功能。

若需在训练过程的其他阶段启用早停机制,请通过创建子类继承 EarlyStopping 类并修改其调用位置:

class MyEarlyStopping(EarlyStopping):def on_validation_end(self, trainer, pl_module):# override this to disable early stopping at the end of val looppassdef on_train_end(self, trainer, pl_module):# instead, do it at the end of training loopself._run_early_stopping_check(trainer)

默认情况下,EarlyStopping 回调会在每个验证周期结束时触发。但验证频率可通过 Trainer 中的参数调节,例如通过设置 check_val_every_n_epoch(每N个训练周期验证一次)和 val_check_interval(验证间隔)。需特别注意:patience(耐心值)统计的是验证结果未提升的次数,而非训练周期数。因此当设置 check_val_every_n_epoch=10patience=3 时,训练器需经历至少 40个训练周期才会停止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912846.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912846.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912846.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解前缀和与差分算法及其C++实现

前缀和与差分是算法竞赛和编程中非常重要的两种技巧,它们能够高效地处理区间查询和区间更新问题。本文将详细介绍这两种算法的原理、应用场景以及C实现。 一、前缀和算法 1.1 前缀和的基本概念 前缀和(Prefix Sum)是一种预处理技术&#x…

HugeGraph【部署】Linux单机部署

注: hugegraph从版本 1.5.0 开始,需要 Java11 运行时环境 一、安装JDK11 1.下载JDK11 https://www.oracle.com/java/technologies/downloads/#java11 2.解压缩包 tar -zxvf jdk-11.0.27_linux-x64_bin.tar.gz 3.修改/etc/profile环境变量 export JAVA_HOME/usr…

C++异步编程里避免超时机制

C标准库中时钟(Clock) 这段内容主要介绍了C标准库中**时钟(Clock)**的概念和分类,以及它们在时间测量中的作用。以下是关键信息的解读: 一、时钟的核心特性 C中的时钟是一个类,提供以下四个基…

npm install安装不成功(node:32388)怎么解决?

如果在执行 npm install 时出现问题,尤其是 node:32388 相关的错误,这通常意味着某些依赖或配置出了问题。这里有一些常见的解决方法,你可以尝试: 1. 清除 npm 缓存 有时候,npm 缓存问题会导致安装失败。你可以清除 …

Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list 更换国内镜像软件源 笔记250702

Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list更换国内镜像软件源 笔记250702 为 Ubuntu 18.04 LTS(代号 Bionic Beaver)更换 /etc/apt/sources.list 为国内镜像源 备份/etc/apt/sources.list文件 sudo cp -a /etc/apt/sources.list /etc/apt/sou…

【运维系列】【ubuntu22.04】安装GitLab

一.下载安装文件 rootgitlab:~# wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/9/gitlab-ce-17.4.0-ce.0.el9.x86_64.rpm二.执行安装脚本 2.1 先执行安装前的命令 rootgitlab:~# apt install -y perl-interpreter rootgitlab:~# apt install -y openssh-s…

Cisco ASA防火墙查看ACL的条目数量

这里显示的条目数量为ACE, ACE是啥? ACE全称: access-list entry ACE指的是ACL条目展开后的数量, 啥叫展开? 示例: access-list out-in extend permit tcp80&443 host 1.1.1.1 host 2.2.2.2这种配置是占1条&#…

npm install安装的node_modules是什么

node_modules 是一个由 npm(Node Package Manager)管理的文件夹,存放着你的 Node.js 项目中所有安装的依赖包。当你运行 npm install 时,npm 会根据你的项目中 package.json 文件中的依赖配置,下载并安装相应的包到 no…

【实时Linux实战系列】实时Linux项目的部署与维护

在实时 Linux 项目的开发过程中,开发阶段的工作仅仅是开始,生产环境中的部署与维护同样至关重要。实时 Linux 系统广泛应用于工业自动化、航空航天、智能交通等对实时性和稳定性要求极高的领域。例如,在工业自动化中,实时系统的部…

Go并发模式精要:掌握Goroutine与Channel的实战艺术

在现代软件开发中,有效利用并发能力已成为提升系统性能的关键。Go语言凭借其原生的Goroutine和Channel机制,为开发者提供了优雅的并发解决方案。本文将深入解析Go并发编程的核心模式与最佳实践。 一、并发基石:Goroutine与Channel // 轻量级…

第29篇:Linux审计系统深度解析:基于OpenEuler 24.03的实践指南

Linux审计系统深度解析:基于OpenEuler 24.03的实践指南 文章目录 Linux审计系统深度解析:基于OpenEuler 24.03的实践指南一、Linux审计系统核心概念与组件架构1.1 审计系统核心组件详解1. auditd守护进程:日志持久化引擎2. auditctl命令行工具…

Linux 启动过程流程图--ARM版

以下是ARM版本Linux启动过程的超详细树状图,涵盖硬件上电到应用程序交互的全流程,并包含关键函数调用链及源码位置,适用于系统开发与调试场景: ARM Linux启动全流程(含函数调用链) ARM Linux启动流程&…

NVMe高速传输之摆脱XDMA设计6之系统架构设计

结合目前应用需求,以及前面基础分析,确定IP应具有如下特色: (1) 通用性 前端数据采集系统基于 FPGA 开发。 一方面, 设备类型多, 使用的 FPGA型号各不相同, 需要实现的设计能够在多种…

Mac homebrew 安装教程

下载github安装包 https://github.com/Homebrew/brew/releases/tag/4.5.8 下载安装后 打开 安全里面允许安装,就可以直接使用了

stm32hal模块驱动(1)hpdl1414驱动

之前一直想用hpdl1414画一块手表,前面pcb测试板画完没空调试,最近刚好空出来时间,遂发下驱动。 这里简单赘述hpdl1414的驱动原理:D0-D6负责数据输入(ascii表后7位),A0,A1负责更改hpdl1414模块显…

从代码学习深度强化学习 - TRPO PyTorch版

文章目录 前言核心工具函数广义优势估计 (Generalized Advantage Estimation, GAE)案例一:TRPO 解决离散动作问题 (CartPole-v1)1. 环境初始化2. 网络结构定义3. TRPO 智能体实现4. 训练与可视化5. 训练主程序与结果案例二:TRPO 解决连续动作问题 (Pendulum-v1)1. 环境与工具…

MySQL 升级到8.4版本的详细指南

本指南详细介绍了将 MySQL 升级到 8.4 版本的完整流程、注意事项和操作方法。 一、升级前准备 (3.1 Before You Begin) 在开始升级之前,必须仔细审阅本节信息并执行所有推荐的操作: 理解升级过程:了解升级期间可能发生的情况。请参阅第 3.4…

leetcode427.建立四叉树

区间x0到x1和区间y0到y1都是左闭右开的 解题基本思路是先判断当前矩阵是不是全0或全1,如果是就直接返回新建的一个节点值(矩阵的统一值,叶子节点),如果不是那就新建一个节点值,非叶并且左上右上左下右下四个方向上递归创建节点 /…

医学+AI教育实践!南医大探索数据挖掘人才培养,清华指导发布AI教育白皮书

教育数字化浪潮正以前所未有的力度重塑高等教育格局。今年4月,为贯彻落实《教育强国建设规划纲要(2024—2035 年)》,教育部等九部门印发《关于加快推进教育数字化的意见》,表明将持续推动“人工智能教育”全方位发展&a…

PDF处理控件Spire.PDF系列教程:如何使用C# 拆分 PDF 文件(完整指南)

PDF文件因其高度的跨平台兼容性和安全稳定的格式特点,广泛应用于企业文档管理和电子资料传输中。随着PDF文档页数和内容复杂度的增加,拆分PDF成为优化文档处理流程、提升办公效率的重要需求。通过编程方式实现PDF拆分,不仅能自动化处理海量文…