pytorch续写tensorboard

模型训练到一半有 bug 停了,可以 resume 继续炼,本篇给出 pytorch 在 resume 训练时续写 tensorboard 的简例,参考 [1-3],只要保证 writer 接收的 global step 是连着的就行。

Code

import numpy as np
from torch.utils.tensorboard import SummaryWriter

global_step = 0
log_p = '.'
losses = 1 / np.arange(1, 21)

# 第一次训练
with SummaryWriter(log_dir=log_p) as writer:
    for loss in losses[:10]:
        writer.add_scalar("loss", loss, global_step)
        writer.add_scalar("loss_1", loss, global_step) # 前半段 loss,作为参考
        global_step += 1

# (此处训练因模型有 bug 中断了)

# 重开,resume 训练。续写 tensorboard log 须:
# 1. 接着之前的 global_step
# 2. 同一个 log_dir
with SummaryWriter(log_dir=log_p) as writer:
    for loss in losses[10:]:
        writer.add_scalar("loss", loss, global_step)
        writer.add_scalar("loss_2", loss, global_step) # 后半段 loss,作为参考
        global_step += 1

这里加了 loss_1、loss_2 作为参考,会生成两个 events.out.tfevents 文件,一个是 loss 前半段和 loss_1,另一个是 loss 后半段和 loss_2。如果没有 loss_1、loss_2,就只有一个 events.out.tfevents 文件,显示一条连续的 loss 曲线。

loss
loss_1
loss_2
如果 global step 不连续,但递增,则也能续写,不过 tensorboard 网页显示时中间会自动补一段曲线。即:

import numpy as np
from torch.utils.tensorboard import SummaryWriter


global_step = 0
log_p = '.'
losses = 1 / np.arange(1, 21)

# 第一次训练
with SummaryWriter(log_dir=log_p) as writer:
    for loss in losses[:10]:
        writer.add_scalar("loss", loss, global_step)
        global_step += 1

# 因 bug 中断,且 global step 没接上之前的
# 但续写 tensorboard 时的开始 global step 大过中断时的 global step(即 global step 递增)
global_step += 5 # 从 9 直变 15

# resume 训练,续写 tensorboard
with SummaryWriter(log_dir=log_p) as writer:
    for loss in losses[10:]:
        writer.add_scalar("loss", loss, global_step)
        global_step += 1

loss-with-global-step-gap
其中 9 < global step < 15 那段是没值的,不过网页显示是补了一段曲线。

Conclusion

所以写模型、存 checkpoint 时考虑记一个 global step,resume 训练时 global step 也 resume,就可以续写 tensorboard 了。

References

  1. Tensorboard resume training plot
  2. Tensorboard: Continue training curves #56
  3. Is it possible to add summaries to an existing event file ? #2399

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GO: 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version[rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …

分享一个开发者武库网站

各种资源信息: 网站地址

数字时代下的内部审计蜕变:探索数字化转型的七大关键领域

写在前面 内部审计是一种独立的、客观的确认和咨询活动&#xff0c;包括鉴证、识别和分析问题以及提供管理建议和解决方案。狭义的数字化转型是指将企业经营管理和业务操作的各种行为、状态和结果用数字的形式来记录和存储&#xff0c;据此再对数据进行挖掘、分析和应用。广义…

Qt添加VTK并绘制图形

文章目录 准备环境使用VS创建Qt Widget项目配置VTK依赖调试C/C链接器 添加vtk窗口测试代码 参考链接&#xff1a; VS2017配置QT环境(详细版)_vs2017 qt-CSDN博客 QT5VTK9.1最新配置方法_qt vtk-CSDN博客 VTK笔记-Qt5.12.11编译VTK9.0.3-QVTKOpenGLNativeWidget-CSDN博客 准…

数字孪生基础开发平台的流程

搭建数字孪生基础开发平台的流程可以分为以下步骤&#xff0c;具体的实施方法和步骤可能会根据具体项目的要求和特点而有所不同。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.需求分析&#xff1a; 确定数字孪生基础开发平台的目…

Find My产品越来越得到市场认可,伦茨科技ST17H6x芯片赋能厂家

苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch&#xff0c;如今的Find My已经不单单可以查找苹果的设备&#xff0c;随着第三方设备的加入&#xff0c;将丰富Find My Network的版图。产…

哪些泛域名ssl证书500元一年送一月

SSL证书是如今数字化时代中重要的一环&#xff0c;随着互联网的发展&#xff0c;单个用户所持有的网站越来越多&#xff0c;因此泛域名SSL证书和多域名SSL证书的签发两越来越多。其中&#xff0c;泛域名SSL证书能够保护主域名以及主域名下所有子域名&#xff0c;它的灵活性和便…

如何批量更改图片的创建时间和修改时间 ? 图片属性更改

在数字时代&#xff0c;图像已经成为我们日常生活中不可或缺的一部分。无论是在社交媒体上分享生活点滴&#xff0c;还是在工作报告中展示数据成果&#xff0c;图像都扮演着至关重要的角色。然而&#xff0c;有时我们可能需要对图像进行一些调整&#xff0c;以更好地满足我们的…

联通国际公司的主机产品的特点

联通国际公司作为中国联通集团旗下专注国际业务的领军力量&#xff0c;近年来在主机产品领域持续发力&#xff0c;凭借高容量、灵活配置和高效服务&#xff0c;以及深厚的专业技术底蕴&#xff0c;为客户在全球范围内提供卓越的托管服务和数据中心解决方案。 高容量优势 联通国…

OWASP Top 10 网络安全10大漏洞——A03:2021-注入

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化&#xff0c;以及一些合并。 A03:2021-注入 Injection从第一的位置滑落至第三位置。94% 的应用程序针对某种形式的注入进行了测试&#xff0c;最大发生率为 19%&#xff0c;平均发生率为 3%&a…

Vue3.0 vue.js.devtools无法显示Pinia调试工具

之前的配置方式&#xff1a; app.use(createPinia()) app.mount(#app) 更新配置方式&#xff1a; app.use(createPinia()).mount("#app") 设置之后即可显示调试工具

电脑记事本怎么查看字数 记事本字数便捷查看方法

在数字化的时代&#xff0c;电脑记事本已成为我记录生活、工作的得力助手。相较于传统的纸质笔记本&#xff0c;它的便捷性不言而喻&#xff1a;随时随地&#xff0c;打开就能写&#xff0c;无需担心纸张用尽或笔墨不干的尴尬。但有一个问题一直困扰着我&#xff0c;那就是如何…

【QT】绘画事件/刷新界面

绘图事件 QPaintEngine提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。QPaintEngine类应用于QPainter和QPaintDevice之间&#xff0c;通常对开发人员是透明的。除非你需要自定义一个设备&#xff0c;否则你是不需要关心QPaintEngine这个类的。我们可以把QPainter理…

Leetcode HOT150

55. 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1 …

202006青少年软件编程(Scratch)等级考试试卷(一级)

青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;一级&#xff09;2020年6月 第1题&#xff1a;【 单选题】 下面哪个按钮可以运行Scratch脚本&#xff08; &#xff09; A: B: C: D: 【正确答案】: C 【试题解析】 : 第2题&#xff1a;【 单…

算法归纳【数组篇】

目录 二分查找1. 前提条件&#xff1a;2. 二分查找边界 2.移除元素有序数组的平方长度最小的子数组59.螺旋矩阵II54. 螺旋矩阵 二分查找 参考链接 https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF 1. 前提条件&#xff1a; 数…

深入了解Python的eval函数:基础用法与潜在危险【第118篇—eval函数】

深入了解Python的eval函数&#xff1a;基础用法与潜在危险 在Python中&#xff0c;eval函数是一个强大而灵活的工具&#xff0c;它允许将字符串作为代码来执行。然而&#xff0c;虽然eval在某些情况下非常方便&#xff0c;但它也潜藏着一些潜在的危险&#xff0c;如果不小心使…

php反序列化-字符逃逸看这一篇就够了

反序列化的特性 <?php /* $_SESSION["user"] guest; $_SESSION[function] highlight_file; $_SESSION[img] base64_encode(/d0g3_fllllllag); //d0g3_f1ag.php $serialize_info serialize($_SESSION);echo $serialize_info;*/$str a:3:{s:4:"user&quo…

TikTok播放量低?快来学习提高TikTok账号权重?

许多TikTok账号运营者都会遇到一个难题&#xff0c;那就是视频要么播放量很低&#xff0c;要么0播放&#xff01;不管内容做的多好&#xff0c;最好都是竹篮打水一场空&#xff01;其实你可能忽略了一个问题&#xff0c;那就是账号权重。下面好好跟大家讲讲这个东西&#xff01…

Dynamo小试牛刀(二)——曲线补充

上次写的比较匆忙&#xff0c;只是整理了几个小的例子&#xff0c;并没有过多的说明&#xff0c;这次稍微补充一点&#xff0c;一步步带着你做。 首先需要了解 Math 系列的节点用法&#xff0c;有&#xff1a; Math.sin/cos——正弦 / 余弦 Math.RadiansToDegrees——将弧度转换…