Pytorch—提前终止代码

news/2024/10/18 5:38:51/

前言

以前使用keras的时候有一个很方便的提前终止类,而pytorch每次都要自己写一次,因此我整理了一个简单通用的代码,需要提前终止功能时,只需cv一下,避免了每次重复写的麻烦。

代码

class EarlyStopping(object):def __init__(self, monitor: str = 'val_loss', mode: str = 'min', patience: int = 1):""":param monitor: 要监测的指标,只有传入指标字典才会生效:param mode: 监测指标的模式,min 或 max:param patience: 最大容忍次数example:```python# Initializeearlystopping = EarlyStopping(mode='max', patience=5)# callif earlystopping(val_accuracy):return;# save checkpointstate = {'model': model,'earlystopping': earlystopping.state_dict(),'optimizer': optimizer}torch.save(state, 'checkpoint.pth')checkpoint = torch.load('checkpoint.pth')earlystopping.load_state_dict(checkpoint['earlystopping'])```"""self.monitor = monitorself.mode = modeself.patience = patienceself.__value = -math.inf if mode == 'max' else math.infself.__times = 0def state_dict(self) -> dict:""":保存状态,以便下次加载恢复torch.save(state_dict, path)"""return {'monitor': self.monitor,'mode': self.mode,'patience': self.patience,'value': self.__value,'times': self.__times}def load_state_dict(self, state_dict: dict):""":加载状态:param state_dict: 保存的状态"""self.monitor = state_dict['monitor']self.mode = state_dict['mode']self.patience = state_dict['patience']self.__value = state_dict['value']self.__times = state_dict['times']def reset(self):""":重置次数"""self.__times = 0def __call__(self, metrics) -> bool:""":param metrics: 指标字典或数值标量:return: 返回bool标量,True表示触发终止条件"""if isinstance(metrics, dict):metrics = metrics[self.monitor]if (self.mode == 'min' and metrics <= self.__value) or (self.mode == 'max' and metrics >= self.__value):self.__value = metricsself.__times = 0else:self.__times += 1if self.__times >= self.patience:return Truereturn False

使用方法

# 初始化,监测模式为最大,最多容忍5次
early_stop = EarlyStopping(mode='max', patience=5)# 整体结构如下:
for epoch in range(1, 21):train_loss, train_acc = train_one_epoch(...)val_loss, val_acc = validate(...)# 如果触发终止条件,就结束训练if early_stop(val_acc):return
  • 保存
def save_checkpoint(..., early_stop, ...):state = {... # 其他保存的东西... 'early_stop': early_stop.state_dict(),...}torch.save(state, 'checkpoint.pth')def load_checkpoint(..., early_stop, ...):checkpoint = torch.load('checkpoint.pth')...early_stop.load_state_dict(checkpoint['early_stop'])...# 使用early_stop = EarlyStopping(mode='max', patience=5)
load_checkpoint(..., early_stop, ...)
# 如果需要的话,重置次数
early_stop.reset()

http://www.ppmy.cn/news/784110.html

相关文章

windows10启动虚拟机就会蓝屏,终止代码:SYSTEM_SERVICE_EXCEPTION(全网权威解决方法!)

前言 没错就是这个,绿色的死亡按钮 原因: 第一种:windows更新原因,正是因为windows系统更新了造成了系统与软件之间不兼容!第二种:没有第二种,(狗头.jpg) 解决方案: 既然是更新问题,就把最近更新的补丁卸载了就行! 进入程序和功能,看安装时间&#xff0c;找到上一次更新时…

w ndows10如何取消开机自动修复,win10专业版开机报错,自动修复失败。(终止代码WDF VIOLATION)...

win10专业版开机报错&#xff0c;自动修复失败。(终止代码WDF VIOLATION) 下面是SrtTrail.txt文档内容&#xff1a; 启动修复诊断和修复日志 --------------------------- 尝试修复次数:1 会话详细信息 --------------------------- 系统磁盘 \Device\Harddisk0 Windows 目录 …

终止代码 PAGE_FAULT_IN_NONPAGED AREA蓝屏解决办法<VM虚拟机>

VM虚拟机打开时宿主机蓝屏&#xff08;已解决&#xff09; 虚拟机传输文件时&#xff0c;宿主机蓝屏&#xff0c;提示终止代码 PAGE_FAULT_IN_NONPAGED AREA 目前蓝屏现象复现点&#xff1a; vmtools 传输稍大文件时<kali和win7均存在此问题> 目前已实践测试无效办法…

win10安装影子系统导致的蓝屏,终止代码:BAD_SYSTEM_CONFIG

我两天前玩游戏害怕笔记本中毒所以用了影子系统,后来GG了上网一看都特么是患难的同道,win10用影子基本凉了,我提供点自己解决的经验吧!我是win10。 电脑开启后出现了几个选项 进入高级选项 启动修复:发现修复不了,无限蓝屏重启,然后我打算进入安全模式看看,高级选项…

windows11安装虚拟机蓝屏警告卡BUG(终止代码:SYSTEM_SERVICE_EXCEPTION),已解决

问题描述 前两天在用windows11安装虚拟机的时候&#xff0c;遇到卡BUG&#xff08;终止代码:SYSTEM_SERVICE_EXCEPTION)&#xff0c;然后蓝屏关机的情况&#xff0c;图片如下 原因分析&#xff1a; 原因是windows11不能够很好地兼容低版本都VMware(大概以版本16为界&#xff…

虚拟机开启系统蓝屏报错:“终止代码:SYSTEM_SERVICE_ECXEPTION“

在虚拟机装系统时&#xff0c;启动虚拟机报错&#xff0c;图片如上&#xff0c;解决方法&#xff1a; 1、开启CPU虚拟化支持。进笔记本BIOS&#xff0c;找到Configuration选项或者Security选项&#xff0c;然后选择Virtualization&#xff0c;或者Intel Virtual Technology&am…

终止代码:DRIVER_IRQL_NOT_LESS_OR_EQUAL 失败的操作:CH341S64.SYS

终止代码&#xff1a;DRIVER_IRQL_NOT_LESS_OR_EQUAL 失败的操作&#xff1a;CH341S64.SYS Python串口程序致使电脑蓝屏自动重启CH430驱动有问题 Python串口程序致使电脑蓝屏自动重启 最近在做一个项目&#xff0c;其中有一块Python程序是使用电脑COM端口实现接收单片机端传上…

windows10启动虚拟机蓝屏,终止代码:SYSTEM_SERVICE_EXCEPTION

关闭Hyper-V不管用。 将VMWare更新到16.1.2即可 安装新版VMWare 正常了&#xff01;✿✿ヽ(▽)ノ✿