【深度学习实战(24)】如何实现“断点续训”?

一、什么是断点续训:

中断的地方,继续训练。与加载预训练权重有什么区别呢?区别在于优化器参数和学习率变了。

二、如何实现“断点续训”

我们需要使用checkpoint方法保存,模型权重,优化器权重,训练轮数。
保存模型,优化器权重可以理解,保存训练轮数是为了获得中断时的学习率。
由于在中断的时候,我们保存了中断时的模型权重,优化器权重,训练轮数,所以再次训练,加载这些参数,便可以继续训练。
实现流程:
(1)断点训练开关设置

# -------------------#
#   断点续训
# -------------------#
resume = True
resume_weights = os.path.join(save_dir, name_last_weights)

(2)使用checkpoint方式保模型权重,优化器权重,训练轮数

# -----------------------------------------------#
#   保存最后一轮模型权重,优化器权重,训练轮数
# -----------------------------------------------#
last_ckpt = {'epoch': epoch, 'model': save_state_dict, 'optimizer': optimizer.state_dict(), 'loss': val_loss}
torch.save(last_ckpt, os.path.join(save_dir, name_last_weights))

(3)模型权重,训练轮数加载

Init_Eoch = ...
model = YourModel()
# -------------------#
#   断点续训
# -------------------#
if resume:if args.resume_weights != '':Init_Epoch = torch.load(args.resume_weights, map_location=device)['epoch']model.load_state_dict(torch.load(args.resume_weights, map_location=device)['model'])

(4)优化器权重加载

optimizer = optim.AdamW(model.parameters(), lr=0.0001)
# -------------------#
#   断点续训
# -------------------#
if resume:if args.resume_weights != '':optimizer.load_state_dict(torch.load(args.resume_weights, map_location=device)['optimizer'])

三、完整“断点续训”框架

# -------------------#
#   断点续训
# -------------------#
resume = True
resume_weights = os.path.join(save_dir, name_last_weights)Init_Eoch = ...
model = YourModel()
# -------------------#
#   断点续训
# -------------------#
if resume:if args.resume_weights != '':Init_Epoch = torch.load(args.resume_weights, map_location=device)['epoch']model.load_state_dict(torch.load(args.resume_weights, map_location=device)['model'])optimizer = optim.AdamW(model.parameters(), lr=0.0001)
# -------------------#
#   断点续训
# -------------------#
if resume:if args.resume_weights != '':optimizer.load_state_dict(torch.load(args.resume_weights, map_location=device)['optimizer'])# -----------------------------------------------#
#   保存最后一轮模型权重,优化器权重,训练轮数
# -----------------------------------------------#
last_ckpt = {'epoch': epoch, 'model': save_state_dict, 'optimizer': optimizer.state_dict(), 'loss': val_loss}
torch.save(last_ckpt, os.path.join(save_dir, name_last_weights))

四、实际应用

从第50轮开始训练,训练到第103轮,中断训练。
loss变化:
在这里插入图片描述

检测变化:
在这里插入图片描述

从第104轮继续训练,训练到第162轮,中断训练。
loss变化:
在这里插入图片描述

检测变化:
在这里插入图片描述

从第163轮继续训练,训练到第320轮,中断训练。
loss变化:
在这里插入图片描述

检测变化:
在这里插入图片描述

从第321轮继续训练,训练到第1000轮,中断训练。
loss变化:
在这里插入图片描述

检测变化:
在这里插入图片描述

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

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

相关文章

【Redis】Spring Boot应用中的Redis分布式锁示例

前言 Spring Boot应用中,使用Redisson框架实现一个分布式锁的详细示例,其中获取锁超时时间为30秒,锁失效时间为20秒。 引入依赖 首先,确保你的Spring Boot应用中包含了Redisson的依赖,你可以在pom.xml中添加如下依赖&…

旅游景区一体化污水处理设备产品特点

诸城市鑫淼环保小编带大家了解一下旅游景区一体化污水处理设备产品特点 产品特点 1、埋设于地表以下,设备上面的地表可作为绿化或其他用地,不需要建房及采暖、保温。 2、二级生物接触氧化处理工艺均采用推流式生物接触氧化,其处理效果优于完全…

游戏自动脚本挂机可行性分析

随着科技的不断发展,自动化和智能化技术逐渐渗透到我们生活的各个方面。在游戏领域,自动脚本挂机技术也应运而生,为玩家提供了一种全新的游戏方式。那么,游戏自动脚本挂机到底可行吗?本文将从多个角度进行深入分析。 一、游戏自动脚本挂机的定义与功能 游戏自动脚本挂机…

100.qt qml-MultiPointTouchArea多点触摸缩放拖拽

介绍 MultiPointTouchArea是一个不可见的项目,用于跟踪多个触摸点,它的父类是Item,所以我们可以通过enabled来设置触摸是启用还是禁用。 它提供了一个mouseEnabled属性,该属性默认为true,也就是说也会处理鼠标事件,鼠标事件其实就是当个触摸点,如果设置为false,则只会处理多…

Oracle删除数据库的步骤【谨慎操作】

在创建数据库的时候,有创建就会有删除,删除数据库的工作需要很多必要的条件 删除数据库会把所有库的数据文件、控制文件、日志文件等物理文件通通给删除掉!!!! 这时候你就可以跑路了。。。。。 1、模拟测试,创建一个测试库 -- 创建临时表空间 [root@cdp1 sql]#cat /d…

韩国机器人公司Rainbow Robotics推出RB-Y1轮式双臂机器人

文 | BFT机器人 近日,韩国机器人领域的佼佼者Rainbow Robotics揭开了RB-Y1移动机器人的神秘面纱,这款机器人以其创新的设计和卓越的功能引起了业界的广泛关注。与此同时,Rainbow Robotics还携手舍弗勒集团(提供汽车、工业技术服务…

SpringCloud整合Ribbon负载均衡器

目录 一、模块一:提供数据 1.1 首先将第一个实例打包 1.2 使用命令行设置不同权重 1.3 打开图形化界面看看权重是否配置成功。 二、模块二:调用模块一 三、修改默认负载均衡策略 四、自定义规则 ​编辑 五、完整代码 5.1 目录结构 5.2 配置文件 …

网络中其他协议

目录 DNS协议 域名简介 ICMP协议 ICMP功能 ICMP协议格式 ping命令 NAT技术 NATP NAT技术的限制 代理服务器 DNS协议 DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。 为什么有这个协…

“数据中心的秘密武器:ADOP AOC和DAC线缆的选择与优势”

🌵【DAC电缆和AOC电缆因其低延迟、低功耗和低成本而广泛应用于数据中心的高性能计算网络布线系统。DAC 电缆和 AOC 电缆有多种配置,以满足网络要求。每款产品均提供 10G SFP、25G SFP28、40G QSFP 和 100G QSFP28 数据速率,并提供从 40G 到 4…

python基础--流程控制之条件语句

目标 条件语句作用if语法if…else…多重判断if嵌套 一. 了解条件语句 假设一个场景: 同学们这个年龄去过网吧吗?去网吧进门想要上网必须做的一件事是做什么?(考虑重点)为什么要把身份证给工作人员?是不…

如何培养单元测试的习惯?怎样才算一个好的单元测试?

你是怎么编写单元测试的呢?很多人的做法是先把所有的功能代码都写完,然后,再针对写好的代码一点一点地补写测试。 在这种编写测试的做法中,单元测试扮演着非常不受人待见的角色。你的整个功能代码都写完了,再去写测试就…

Codeforces Round 816 (Div. 2)(D拆位图论构造 E斜率优化)

C&#xff1a;直接单独算每个位置的贡献&#xff0c;如果当前位置和前面位置重复了&#xff0c;那么前面就没选的位置了 修改的时候只要重新算i和i1位置即可 #include<bits/stdc.h> using namespace std; const int N3e510,M2*N,mod1e97; #define int long long #defin…

RAG开山之作:结合参数化与非参数化记忆的知识密集型NLP任务新解法

20年RAG刚提出时的论文&#xff1a;Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks&#xff0c;也算是RAG的开山之作之一了。 摘要&#xff1a;检索增强生成&#xff08;RAG&#xff09;方法结合了预训练语言模型与基于检索的非参数化记忆&#xff0c;通过…

webview的使用方法和后退键的处理

WebView是一个能够显示网页内容的控件&#xff0c;通常用于Android或iOS应用程序中嵌入网页。下面我将分别说明WebView在Android和iOS中的使用方法&#xff0c;以及如何处理后退键。 Android中的WebView使用方法 添加WebView到布局文件中 在你的布局XML文件中添加WebView控件…

Vue+Echarts 实现中国地图和飞线效果

目录 实现效果准备 实现效果 在线预览&#xff1a;https://mouday.github.io/vue-demo/packages/china-map/dist/index.html 准备 高版本的echarts&#xff0c;不包含地图数据&#xff0c;需要自己下载到项目中 1、地图数据下载 https://datav.aliyun.com/portal/school/at…

Pasta:HHE Optimized Stream Cipher

参考文献&#xff1a; [Dae95] Daemen J .Cipher and hash function design strategies based on linear and differential cryptanalysis[J].Doctoral Dissertation K.u.leuven, 1995.[GPP11] Guo J, Peyrin T, Poschmann A. The PHOTON family of lightweight hash function…

class091 贪心经典题目专题3【左程云算法】

class091 贪心经典题目专题3【左程云算法】 前言版权推荐class091 贪心经典题目专题3最后 前言 2024-4-23 13:58:40 以下内容源自《【左程云算法】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://…

数据转换 | Matlab基于RP递归图一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 Matlab基于RP递归图一维数据转二维图像方法 基于RP&#xff08;Recurrence Plot&#xff09;递归图的方法可以将一维数据转换为二维图像&#xff0c;以可视化数据的动态特征。RP递归图是一种表示时间序列相…

【数据结构3-栈和队列】

数据结构3-栈和队列 1 栈-特殊的线性表-先进后出1.1 栈的三个案例 2 队列-与栈相反-先进先出2.1 队列的案例 3 用C实现栈的代码&#xff1a;4 用C实现队列的代码 1 栈-特殊的线性表-先进后出 1.1 栈的三个案例 2 队列-与栈相反-先进先出 2.1 队列的案例 3 用C实现栈的代码&…

代码随想录算法训练营第三十六天| LeetCode435.无重叠区间、LeetCode763.划分字母区间、LeetCode56.合并区间

LeetCode 435 无重叠区间 题目链接&#xff1a;435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 【解题思路】 需要先将数组按照左/右边界排序&#xff0c;这里按照左边界排序来解 如果第i个区间的左边界大于等于i-1区间的右边界 【解题步骤】 1.判断数组大小&am…