深度学习(14)—— 关于Tensorboard

news2024/12/23 11:09:25

深度学习(14)—— 关于Tensorboard

文章目录

  • 深度学习(14)—— 关于Tensorboard
    • 前言
    • 1. “一参数一图”
    • 2.“多参数一图”
    • 3. “一栏一图”
    • 4. “一栏多图”

在模型训练过程中loss和acc都会发生变化,常常需要记录这些值,以便后期调整参数时有的根据,我刚开始用tf的时候里面有个function可以记录到checkpoint中,后来换用pytorch,自己懒得琢磨,就直接建立一个log列表记录每个epoch的train-loss,val-loss,train-acc和val-acc,以及其他的参数如learning-rate,weight-decay等。之前在一些代码中看到tensorboard,当时拿来用了用,但是也没有详细研究,直到一周前,一个同门要用,然后师兄自己以前也没研究过,他自己搞明白后,给大家做了个知识普及。好用的东西当然要拿出来和大家分享啦~( 先在此感谢师兄大晚上九点半不回家给大家讲完这个小知识点,属实辛苦

前言

  • 需要先安装好tensorboard的package
  • 导入tensorboard
from torch.utils.tensorboard import SummaryWriter
  • 创建日志文件夹
    创建该文件夹,可以理解为这个项目的log文件都保存在这个文件夹下,里面可以根据参数的不同建立显得子文件夹,在实例化中进行
import os
import torch
log_dir = rf'./logs_{grade}'
if not os.path.exists(log_dir):
    os.mkdir(log_dir)
else:
    print(f'{log_dir} exist')
  • 实例化tensorboard
    在大的log文件夹中会新建一个文件夹,文件夹的名字是batch…(我以batch,学习率,weight_decay和gamma值作为子文件夹名)
tb_writer = SummaryWriter(log_dir= f'{log_dir}/batch_{batch_size}_lr_{learning_rate}_wd_{weight_decay}_gamma_{gamma}') # 保存日志到 logs/lr_1e-4_batch_16/ 下

最后的log文件夹会是这样子的
在这里插入图片描述

1. “一参数一图”

add_scalar()

        tb_writer.add_scalar('train/loss', train_loss, epoch)
        tb_writer.add_scalar('train/acc', train_acc, epoch)
        tb_writer.add_scalar('val/loss', val_loss, epoch)
        tb_writer.add_scalar('val/acc', val_acc, epoch)
        tb_writer.add_scalar('learning_rate', optimizer.param_groups[0]["lr"], epoch)

解释一下:最后会产生train,val和learning_rate三栏,第一栏里面有两个figure分别是loss和acc,第二栏有两个figure,第三栏有一个figure
在这里插入图片描述
在这里插入图片描述

2.“多参数一图”

add_scales()

       tb_writer.add_scalars('loss/',{'train':train_loss,'validate':val_loss},epoch)
       tb_writer.add_scalars('accuracy/',{'train':train_acc,'validate':val_acc},epoch)
       tb_writer.add_scalar('learning_rate',optimizer.param_groups[0]["lr"],epoch)

解释一下:最后会产生loss,accuracy和learning-rate三栏,每一栏只有一个figure,表示不同的阶段。学习率还是一个参数,只有前两个是两个参数。注意,重要的事情说三遍:想要多个参数一定是add_scales!!!加s,加s,加s!!!然后后面使用字典形式列出需要可视化的参数!!!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

OK,截止目前我用只用到这些,其实tensorboard还有其他的功能,如保存模型中间生成的figure等,可以通过这个来检查模型的有效性,但是呢,我还没有看,其实因为我还没试用,但是看效果是OK的。我也付一下test代码,你们用的话自取。

3. “一栏一图”

from PIL import Image
import numpy as np
writer = SummaryWriter(log_dir= f'{log_dir}/lr_1e-4_batch_18')
img_HWC = np.array(Image.open('train_valid/image/1.png').convert('RGB'))  # 彩色图
img_HW = np.array(Image.open('train_valid/image/1.png').convert('L')) # 灰度图
# If you have non-default dimension setting, set the dataformats argument.
for  i in range(5):
    writer.add_image('my_image_HWC', img_HWC, i, dataformats='HWC')
    writer.add_image('my_image_HW', img_HW, i, dataformats='HW')
writer.close()

注:保存图片支持numpy和tensor,不支持PIL的image,需要转换!RGB和灰度图是add的时候dataformat是不同的!

4. “一栏多图”

from PIL import Image
import numpy as np
writer = SummaryWriter(log_dir= f'{log_dir}/lr_1e-4_batch_18')

img_batch = np.zeros((5, 584, 565,3))
label_batch = np.zeros((5, 1, 584, 565))
for ind,i in enumerate(os.listdir('train_valid/image/')[0:5]):
    image  = np.array(Image.open(fr'train_valid/image/{i}'))
    label = np.array(Image.open(fr'train_valid/mask/{i}').convert('L'))
    img_batch[ind,:,:,:] = image
    label_batch[ind,0,:,:] = label
print(label_batch.shape)
# If you have non-default dimension setting, set the dataformats argument.
writer.add_images('batch/image', img_batch, 0, dataformats='NHWC') # 彩色batch
writer.add_images('batch/label', label_batch,0, dataformats='NCHW') # 灰度batch 必须是NCHW
writer.close()

注:可以保存一个batch的图片!保存RGB和灰度图的时候dataformat是不同的!

如果是:

  • RGB:NHWC/NCHW都可以
  • 灰度:只能NCHW

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

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

相关文章

Spring Security(2)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ 前面已经把需要的环境准备好了,包括数据库和SQL语句,现在再来写代码。至于安装MySQL什么的就跳过去了,娘度子里面一大把。 先…

保护Excel表格的4种常用方法

今天来说说,根据不同需求,我们可以给Excel表格设置保护的4种常用方法,记得保存收藏,总有一个适合你。 方法一: 如果不想Excel表格被他人随意打开,可以设置“打开密码”,这样只有输入设置的密码…

OpenSergo 流量路由:从场景到标准化的探索

流量路由,顾名思义就是将具有某些属性特征的流量,路由到指定的目标。流量路由是流量治理中重要的一环,多个路由如同流水线一样,形成一条路由链,从所有的地址表中筛选出最终目的地址集合,再通过负载均衡策略…

git ssh permission denied解决办法

git ssh permission denied解决办法 1. SSH配置 参考链接 SSH配置文档 2. ssh报错(permission denied) 解决方式: 找到git安装目录 进入etc/ssh文件夹内,找到ssh_config文件,在# Added by git-extra后面添加t替换代码具体参考下面图片 H…

2022强网拟态pwn-store

2022强网拟态pwn-store 这是一个综合题,io链接的构造,orw的系统位数的限制 首先是这个沙箱,64位只有r和w,一开始看的时候很纳闷多了32位的限制,64位还没有o,查了一下才知道这样的seccomp-tools是以64位的…

Design Compiler工具学习笔记(4)

目录 引言 知识储备 实际操作 设计源码 Vivado2018.3仿真 VCS2016仿真 Tcl脚本 约束脚本 MY_TOP.tcl 运行脚本 RUN.tcl 引言 本篇继续学习 DC的基本使用。本篇主要学习 DC 需要的环境约束。 前文链接: Design Compiler工具学习笔记(1&#x…

【苹果推iMessage位置推相册共享推送】软件安装上传到appstore都是需要的Activity

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

maxcompute优化慢执行语句思路

maxcompute慢执行任务优化如何锁定慢执行任务?判断是何种类型的慢任务如何锁定慢执行任务? 第一步:如果是周期任务可以通过任务执行日志中的LogView 链接查看 ,如果是临时任务则通过maxcompute命令行 执行wait instanceId instanc…

现代密码学导论-2-古典密码及其密码分析

目录 1.3 古典密码和密码分析 1.3.1 凯撒密码 Caesar’s cipher 1.3.2 移位密码 shift cipher 1.3.3 充分密钥空间原则 1.3.4 单表代换密码 mono-alphabetic substitution cipher 1.3.5 利用字母频率对移位密码的一种改进攻击 1.3.6 维吉尼亚密码(多表代换密码)Vigenere…

Ansys Zemax | 使用 OpticStudio 进行闪光激光雷达系统建模(上)

前言 在消费类电子产品领域,工程师可利用激光雷达实现众多功能,如面部识别和3D映射等。尽管激光雷达系统的应用非常广泛而且截然不同,但是 “闪光激光雷达” 解决方案通常都适用于在使用固态光学元件的目标场景中生成可检测的点阵列。凭借具…

教育行业数据可视化应用方案与实践

教育行业背景介绍 随着信息技术发展,教育领域中的学习方式、教学模式、教学内容均已发生重大变革,以云计算、人工智能、物联网、大数据等技术的结合,“智慧教育”的需求也变的紧迫,需要围绕“智慧教育”而产生的产品和解决方案也…

课程思政案例----简道云零代码应用开发实训平台

为了更好推动零代码开发课程的思政建设,在传递大数据相关知识和技能的同时帮助学生塑造正确的世界观、人生观和价值观。我们整理了与简道云平台结合的应用案例,开放给全国各大高校使用。 1、杨卫红:一位55岁不懂代码的农经员,为家…

Windows下将文件夹映射为磁盘

Windows下将文件夹映射为磁盘背景描述方法一:使用命令方法二:映射网络驱动器背景描述 公司发的新电脑,只有普通用户权限,所以可想而知磁盘只有一个C盘,但是以前习惯性的将一些软件啥的放在D盘中,所以把C盘…

打好“三场仗”,数据库新晋厂商石原子胜券在握

纵观数字经济时代,数据规模呈爆发式增长,国产化替代加速发展。据中国信通院《数据库发展研究报告(2021年)》预测,预计到2025年,全球数据库市场规模将达到798亿美元,其中,中国数据库市场总规模将达到688亿元…

js文件模块化引用问题(JavaScript modules)

有个前端项目,需要用到配置文件。这个配置文件实在是太大了,就想拆成多个小的,然后一一引入,组合成一个完整的配置文件。 如果是vue代码,这种情况根本是手到擒来,不费吹灰之力,而该前端项目是个…

(WRF-UCM)高精度城市化气象动力模拟技术

气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域(生态、水资源、风资源及碳中和等问题)的主要驱动因素,合理认知气候变化有利于解释生态环境变化机理及过程,而了解现在、未来气候变化则是进行生态、环境及能源评…

vs2022 编译遇见编译器堆空间不足,解决办法(针对CMAKE工程)

1、原因: 就是编译工程文件太大,导致堆栈溢出。原始vs默认的编译器是32位,我们设置为64位就可解决部分问题。 具体可能造成的原因可以参考: 错误 C1060 |微软学习 (microsoft.com) 2、解决: 1、需要提前安装cmake…

iOS关于搜索不规则瀑布流布局的实现小结

最近在项目开发中遇到了不规则搜索布局的问题。 之前常用的解决方案是用一个tableview用一个循环动态的加载,唯一的缺点是需要动态的移除,其实也已经足够。ios搜索历史记录不规则布局-IOS代码类资源-CSDN下载,需要的话可以下载使用。请教了一…

双向链表的实现

这里以结构体的方式来实现链表,也可以使用类。结构体在没有修饰符的情况下,默认是共有访问。如有不对,希望能指出。 目录 一、链表和结点结构体的声明 (ListNode.h) 二、链表各个功能的实现 1、增 (1) 构造函数(创建链表头结点…

简历上写着“精通 MySQL”,阿里面试官非要跟我死磕,最后还是给我发了 offer

事情是这样的 前段时间因为想要跳槽就去面试了下阿里,大家也都清楚,精通这个词在简历上属于很难把握住的一个词,如果你在你的简历上面写着你精通 XX 技术,那面试官就会默认你是真的很会,刨根问底问到你崩溃。 我之前…