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

news2024/11/19 17:31:01

一、什么是断点续训:

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

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

我们需要使用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.coloradmin.cn/o/1624505.html

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

相关文章

TablePlus for Mac/Win:开启高效数据开发新纪元

在当今数字化时代,数据的重要性日益凸显。无论是企业还是个人,都需要一款强大而实用的本地原生数据开发软件来提升工作效率。而 TablePlus for Mac/Win 正是这样一款卓越的工具,它为用户带来了全新的体验,让数据开发变得更加轻松、…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(三)

课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 4 - 6节) P5《04.快速入门》 本节来实现一个 HelloWorld 效果: 1、打开编辑器,选择新建项目&…

【matlab】reshape函数介绍及应用

【matlab】reshape函数介绍及应用 【先赞后看养成习惯】求点赞关注收藏😀 在MATLAB中,reshape函数是一种非常重要的数组操作函数,它可以改变数组的形状而不改变其数据。本文将详细介绍reshape函数的使用方法和应用。 1. reshape函数的基本语…

Redisson分布式锁 --- 源码分析

1.获取一把锁 RLock lock redissonClient.getLock("订单lock"); 2.业务代码加锁 lock.lock(); 2.1 lock.tryAcquire Long ttl tryAcquire(leaseTime, unit, threadId); 2.2 lua脚本: tryLockInnerAsync方法 如果获取锁失败,返回的结果是这个key的剩…

ssm项目搭建,springboot项目搭建

一、springboot项目搭建 1.新建一个文件夹用idea打开 2.配置maven工作目录、jdk路径、编码方式 3.pom.xml依赖管理&#xff1a;不同的项目&#xff0c;只需要修改下面的三行就可以 <groupId>com.qcby</groupId> <artifactId>HXQ0419</artifactId> &l…

如何安装、升级英伟达显卡驱动

目录 方式一&#xff1a;GeForce Experience 方式二&#xff1a;英伟达官网手动下载驱动 在做深度学习的过程中&#xff0c;难免会使用到cudatoolkit&#xff0c;而cudatoolkit又需要跟英伟达显卡驱动适配。比如笔者使用的电脑目前安装的英伟达显卡驱动 Driver Version: 516.…

git的安装与配置教程--超详细版

一、git的安装 1. 官网下载git git官网地址&#xff1a;https://git-scm.com/download/win/ 选择需要的版本进行下载 2、下载完成之后&#xff0c;双击下载好的exe文件进行安装。 3、默认是C盘&#xff0c;推荐修改一下路径&#xff0c;然后点击下一步 4、Git配置&#xff…

Java虚拟机(jvm)常见问题总结

1.电脑怎样认识我们编写的Java代码 首先先了解电脑是二进制的系统&#xff0c;他只认识 01010101比如我们经常要编写 HelloWord.java 电脑是怎么认识运行的HelloWord.java是我们程序员编写的&#xff0c;我们人可以认识&#xff0c;但是电脑不认识 Java文件编译的过程 1. 程…

4.25日学习记录

[HZNUCTF 2023 preliminary]ppppop 对于php反序列化&#xff0c;在之前的学习中有过了解&#xff0c;但是对于序列化字符串的格式不是很了解&#xff0c;刚好接触这题&#xff0c;可以了解一下 序列化字符串的格式&#xff1a; 布尔型&#xff08;bool&#xff09;b&#xf…

bugfix: com.alibaba.druid.sql.parser.EOFParserException: EOF

前言 在日常的开发工作中&#xff0c;我们经常会遇到各种各样的问题&#xff0c;其中涉及数据库操作的接口联调尤其容易出现意想不到的状况。今天我就遇到了一个关于Druid SQL解析异常的问题&#xff0c;具体表现为com.alibaba.druid.sql.parser.EOFParserException: EOF。通过…

盲人使用公共设施:科技助力无障碍出行与智能识别

在我们的日常生活中&#xff0c;公共设施扮演着不可或缺的角色&#xff0c;它们为人们提供了便利的服务&#xff0c;构建起和谐、高效的社会环境。然而&#xff0c;对于视障人士而言&#xff0c;尽管公共设施设计之初便考虑到通用性和包容性&#xff0c;实际使用过程中仍难免遭…

云原生Kubernetes: K8S 1.29版本 部署Nexus

目录 一、实验 1.环境 2.搭建NFS 3. K8S 1.29版本 部署Nexus 二、问题 1.volumeMode有哪几种模式 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注masterK8S master节点1.29.0192.168.204.8 node1K8S node节点1.29.0192.168.204.9node2K…

【代码复现】Ultra-Fast-Lane-Detection-V2 代码复现。

GitHub源码&#xff1a;https://github.com/cfzd/Ultra-Fast-Lane-Detection-v2?tabreadme-ov-file 按照 install.md复现遇到的问题&#xff1a; 这行命令有问题&#xff0c;先跳过。改用如下命令&#xff1a; pip install torch1.8.0cu111 torchvision0.9.0cu111 torchaud…

猫头虎分享已解决Bug || TypeError: Cannot read property ‘map‘ of undefined**

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

重磅!这本8.8分的Q1 On Hold期刊,或将迎来转机!

【SciencePub学术】低分期刊由于质量问题被On Hold很常见&#xff0c;但是高分期刊也被On Hold&#xff0c;那就值得警惕了。 小编最近听到风声&#xff0c;目前位于On Hold期刊之列&#xff0c;但影响因子最高的 chemosphere 或迎来转机&#xff01; 图源&#xff1a;网络 …

基于YOLOv8的多端车流检测系统(用于毕设+开源)

目录 ✨基于YOLOv8&#x1f680;的多端车流检测系统-MTAS (Multi-Platform Traffic Analysis System) 一、基本功能介绍 1、客户端 &#xff08;pyside6yolov8pytorch&#xff09; 2、网页端&#xff08;Vue3TypestriptPython3MySQL&#xff09; 3、创新点&#xff08;毕设需…

ida调试技巧-通过修改eip寄存器的值强制运行程序中存在但未被调用的函数

ctf逆向分析过程中有一类情况是程序中有某个函数未被调用&#xff0c;但其中存在一些重要信息&#xff08;例如flag&#xff09;且需要运行&#xff08;即动态调试&#xff09;后才可以获取到 因为主函数的进程中从未调用&#xff0c;因此单纯的调试无论如何也无法进入该函数 e…

linux 系统文件目录颜色及特殊权限对应的颜色

什么决定文件目录的颜色和背景&#xff1f; 颜色 说明 栗子 权限白色表示普通文件 蓝色表示目录 绿色表示可执行文件 浅蓝色链接文件 黄色表示设备文件 红色 表示压缩文件 红色闪烁表示链接的文件有问题 灰色 表示其它文件 可以用字符表示文件的类型&am…

D-Wave 推出快速退火功能,扩大量子计算性能增益

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;1400字丨6分钟阅读 摘要&#xff1a;量子计算公司 D-Wave 宣布在其 Leap™ 实时量子云服务中的所有量子处理单元 (QPU) 上推出新的快速退火功能。…

井字棋源码(网络线程池版)

源码链接&#xff1a;game 效果可能没有那么好&#xff0c;大家可以给点建议。 效果展示 game.h #include <stdio.h> #include <stdlib.h> #include <time.h>#define ROW 3 #define COL 3void InitBoard(char board[ROW][COL], int row, int col) {int i…