在Pytorch中使用Tensorboard可视化训练过程

这篇是我对哔哩哔哩up主 @霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享

本节课我们来讲一下如何在pytouch当中去使用我们的tensorboard

对我们的训练过程进行一个可视化

左边有一个visualizing models data and training with tensorboard

主要是这么一个教程

那么这里我想问一下大家

平时你们在使用tensorboard的时候

主要会去使用它的哪些功能

反正在我个人使用当中呢

我主要会使用其中的四个功能

第一个就是去保存一下网络的一个结构图

比如说在我们tensorboard的graphs当中

会有我们模型的一个结构图

然后这个图当中呢其实就能够比较清晰地看到我们整个模型

它的搭建的每一个模块

第二个呢就是保存我们在训练过程当中

训练集它的一个损失loss 还有验证集的accuracy 还有我们的学习率变化等等

在我们的scalars当中

那么这里呢就比如说我们这里有tracy

还有我们的learning rate

还有我们的train loss

那么第三个就是保存权重数值

它的一个分布在tensorboard当中的histogram当中

在这个里面呢一般就是保存我们每一个层结构

它的一个权重的数值的一个分布

那么最后一个呢就是保存我们预测图片的一些信息

就比如说在我们的image当中保存有我们训练的每一个step对于我们给定的一些图片

它的一个预测的一个结果

首先我们这里需要建一个文件夹

叫做plot image

那么在这个文件夹当中呢

我们所保存的图片是我们待会儿在训练过程当中

会对我们的这些图片进行预测

由于本节课训练是以我们之前的花分类数据集为例

所以呢我们这里需要先提前准备好我们的花分类数据集

我这里有给下载花分类数据集的一个地址

下载完之后呢

我们这里的image root就指向我们解压之后文件夹它的一个路径

那么准备好我们的数据集之后呢

接下来就是关于预训练权重了

那么这里也是根据你个人的需求来进行选择了

如果你是需要去使用它的预训练权重的话

你就在这个pytorch官方的这个地址上去下载这个权重文件

然后将这里的defaul指向你刚刚下载这个权重路径就可以了

那如果你不去指认的话

那么它默认的就是不去使用任何预训练权重了

那么本教程其实是没有去使用这个预训练权重的

因为如果你使用了预训练权重之后呢

你会发现它的accuracy loss基本上是没有变化的

因为在你训练的第一个epoch

它的准确率就已经达到97%了

所以基本看不出有什么变化

这里我不去使用预训练权重

就可以看到它的loss变化以及accuracy变化

那么这个参数freeze layers

就是说是否去冻结我们的除全连接层以外的所有网络结构啊

这里默认是false

就是不去冻结

如果你设置为true的话

它就会去单独训练最后这个全连接层

之前的权重是不会去训练的

那么如果你使用这个预训练权重的话

你可以将这里设置为true

可以加快模型的训练

首先我们这里的summary writer

它是来自于touch utils的tensorboard的模块当中导入进来的

所以我们这里先实例化我们的tensorboard对象

这里我们需要插入这个参数呢

就是说我们将我们的tensorboard的文件保存在哪里

我这里就是保存在当前项目目录下的runs

然后flower experiment这个文件夹当中

那么当我们实例化之后呢

它就会在我们当前项目想创建一个runs这个文件

然后会将我们对应的tbd文件保存在flower experiment当中

实例化我们的tensorboard对象之后呢

这里有去添加我们网络的一个结构图

在我们实例化我们的模型之后呢

紧接着在这里我创建了一个initial image

它就是一个零矩阵了

这里为什么要去创建一个initial image呢

因为在我们添加这个graph的时候

我们是需要将我们这个initial image传入到我们的模型当中

让它进行一个这样传播

然后会根据我们输入的数据

在模型中正向传播的一个流程来创建我们的网络结构图

所以我们这里传入的数据只要和我们的图片大小相同就可以了

所以呢我这里就有创建一个initial image

那么我们通过我们实例化的tensorboard

它的add graph这个函数项目的模型

以及我们初始的一个图片传入进去就ok了

在我们的这个位置有使用到add scaler

那么这里呢其实就是在我们训练的每个epoch之后

也就是在我们验证完我们的模型之后

我们会去保存一下我们当前这一轮训练的训练集的平均损失loss

还有我们验证集的accuracy

以及我们的learning rate

我们传入有这五个变量

第一个那就是我们实例化的模型

第二个image

第二对应的就是我们刚刚这个plot image它的一个根目录

第三个transform对应着我们验证集所使用的一个图像预处理

第四个参数对应就是我们总共要展示多少张图片

第五参数就是我们说使用的device信息

然后接下来我们再往下走就到了我们这里的add figure

也就是添加我们预测plot image文件夹下这几张图片

第一个是我们这张图片它的一个名称

它的一个标题

然后第二个参数对应的就是figure这个对象

第三个global step朋友们是通过epoch来指定的

首先在我们训练过程当中呢

我们会去生成一个json文件

这个json文件保存的就是我们类别索引

以及它的一个名称的一个对应关系

那么这里呢只要是正常训练的话

就会生成它

那如果它不存在的话

就说明训练过程是有问题的

那么这里就会报出一个错误

就是没有找到这个文件

然后接下来我们就会读取这个文件

我们通过touch stack方法将我们的images

也就是我们刚刚所保存的一个图片的列表进行一个拼接

拼接成一个batch

那么这里大家需要注意的是

我们的stack方法会对我们的数据增加一个新的维度

那么通过我们刚才预处理之后

其实我们的每一个图片就变成了一个tensor的格式

它的shape就是3x224x224

那么这里呢我们会在它的最前面新增一个维度

那么就变成了拼接之后呢

它就变成了batch x 3x224x224

我已经将我之前训练好的结果保存在对应的文件夹下面了

那么接下来我们就来打开tenor board来看一下

那么首先进入我们的项目根目录

然后呢进入我们的runs文件

然后打开终端

打开终端之后呢

然后就输入tensorboard

然后logdir

然后就输入当前路径就可以了

然后接下来大家需要注意的是

我们还需要再加上一个参数啊

就是这个samples per plugin

然后在这个参数当中

我们需要指定一下我们所展示图片的一个数目

如果我们不指定这个参数的话

它默认会去采样十张图片

因为在我这个训练过程当中呢

如果按照默认参数来的话

只能看到十张

所以我这里会加上这么一个参数

指定为50之后呢

它就会展示所有的图片了

那么回车之后呢

终端就提示我们在local host 端口可以看到

那么我们就进入浏览器

输入local host 6006回车

然后就可以看到我们训练过程当中保存了一系列的数据了

那么在这个blog当中

我们可以看到我们那个数据的流向

就是根据这个箭头可以判断出数据的流向

我们的初始化方法中只定义了一个relu

也就是说我们在我们主干分支当中所使用的这个relu结构

与我们主干分支与捷径分支相加之后所经过的机函的relu是同一个

所以这里会有一个往回流的一个箭头

然后经过relu之后呢

它就会输入到下一个模块当中

如果你想为了这个图看起来更好看的话

其实你可以在定义block的时候

定义两个relu

主分支上使用主分支这个relu

然后相加之后再使用另外一个relu

这样的话就不会出现像我们这个箭头往回指的这个情况

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

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

相关文章

SPECPOWER2008

一、前言# 1、软件说明# 官网:SERT套件用户指南2.0.5SPECpower介绍SPEC基准及工具SPECpower_ssj2008测试结果SPECpower_ssj2008-Design_ccs - SPEC# SPEC(the Standard Performance Evaluation Corporation)是一个由计算机硬件厂商、软件公…

fatal error: sql.h: No such file or directory的解决办法

Ubuntu环境下运行命令 sudo apt install unixodbc-dev 来源:https://github.com/mkleehammer/pyodbc/issues/441

【面试】测试/测开(ING)

63. APP端特有的测试 参考:APP专项测试、APP应用测试 crash和anr的区别 1)网络测试 2)中断测试 3)安装、卸载测试 4)兼容测试 5)性能测试(耗电量、流量、内存、服务器端) 6&#xf…

十、数据读/写流程

1、数据写入流程: (1)基础流程 ~客户端发送请求 ~NameNode做判断,是否具有权限,空间是否充足 ~返回地址,告诉客户端一个datanode, ~向指定的datanode发送数据包, 副本的复制和备…

Liunx系统使用超详细(五)~命令符号

目录 一、逻辑符号 1.1&& 1.2|| 二、连接符号 2.1| 2.2> 2.3>> 2.4< 三、分隔符号 3.1 &#xff1b; 在Linux中&#xff0c;逻辑符号和连接符号常用于构建命令行中的逻辑操作和管道操作。下面对这两种符号进行总结描述。 一、逻辑符号 1.1&…

管理类联考——数学——真题篇——按题型分类——充分性判断题——秒杀

题型结构 问题求解&#xff1a;通过计算求解&#xff0c;从五个选项中选出一个正确答案。条件充分性判断&#xff1a;问所给的条件&#xff08;1&#xff09;&#xff08;2&#xff09;能否推出题设的结论&#xff0c;共有五个选项&#xff0c;从中选出正确的一个。&#xff0…

Qt练习题

1.使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否…

ubuntu18.04配置cuda+cudnn+anconda+pytorch-gpu+pycharm

一、显卡驱动安装 执行nvidia-smi查看安装情况 二、cuda安装 cuda官网下载cuda_11.6.2_510.47.03_linux.run&#xff0c;安装执行 sudo sh cuda_11.6.2_510.47.03_linux.run提升安装项&#xff0c;驱动不用安装&#xff0c;即第一项&#xff08;Driver&#xff09;&#xff…

int(1) 和 int(10) 的区别

int(1) 和 int(10) 的区别 最近遇到个问题&#xff0c;有个表的要加个user_id字段&#xff0c;user_id字段可能很大&#xff0c;于是我提mysql工单alter table xxx ADD user_id int(1)。领导看到我的sql工单&#xff0c;于是说&#xff1a;这int(1)怕是不够用吧&#xff0c;接…

springboot智慧导诊系统源码:根据患者症状匹配挂号科室

一、系统概述 医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号&#xff0c;在就诊的过程中有许多患者不知道需要挂什么号&#xff0c;要看什么病&#xff0c;通过智慧导诊系统&#xff0c;可输入自身疾病的症状表现&#xff0c;或选择身体部位&#xff0c;在经由智慧导诊…

【EtherCAT详解】基于Wireshark的EtherCAT帧结构解析

写在前面 EtherCAT的报文比较繁琐,且一些参考书籍错误较多,且晦涩难懂,对于初学者,很难快速的入门。本文适用于有一定基础的研究者,如对报文有一些研究、对canopen协议有一定了解、并且对TwinCAT有了解的研究者。当然,对于初学者来说,也是很好的引导,少走很多弯路。本…

云上巴蜀丨云轴科技ZStack成功实践精选(川渝)

巴蜀——古政权必争之地 不仅拥有优越的战略位置 而且拥有丰富的自然资源&#xff0c;悠久的历史文化 如今的川渝经济、人口发展迅速 2023年前三季度&#xff0c;四川与重庆GDP增速均超过国家平均线&#xff0c;为6.5%为5.6% 川渝经济发展带动数字化发展浪潮 云轴科技ZSt…

智能外呼是什么意思?智能外呼的工作原理是什么?

智能外呼是什么意思&#xff1f; 智能外呼是指利用人工智能技术实现对电话外呼的优化和自动化&#xff0c;以提高外呼效率和质量。智能外呼可以根据客户的需求和行为进行智能化的拨号、语音识别、语音合成、自动化问答等操作&#xff0c;从而实现更高效、更准确的客户沟通和营…

Linux高级管理-搭建网站服务

在Ihternet 网络环境中&#xff0c;Web 服务无疑是最为流行的应用系统。有了Web站点&#xff0c;企业可以充分 展示自己的产品&#xff0c;宣传企业形象。Web站点还为企业提供了与客户交流、电子商务交易平台等丰富 的网络应用。部署与维护Web 服务是运维工程师必须掌握的一个技…

2.修改列名与列的数据类型

修改字段名与字段数据类型 1.修改字段名 有时&#xff0c;在我们建好一张表后会突然发现&#xff0c;哎呀&#xff01;字段名貌似写错了&#xff01;怎么办&#xff1f;要删了表再重新建一个新表吗&#xff1f;还是要删了这个字段再新建一个新的字段&#xff1f; 都不用&…

【排序算法】希尔排序

一&#xff1a;基本介绍 插入排序介绍 1.1 插入排序存在问题 我们看简单的插入排序可能存在的问题 数组 arr {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是&#xff1a; {2,3,4,5,6,6}{2,3,4,5,5,6}{2,3,4,4,5,6}{2,3,3,4,5,6}{2,2,3,4,5,6}{1,2,3,4,5,6} 结论:…

hive 命令行中使用 replace 和nvl2 函数报错

1.有时候在命令行的情况下使用 replace 函数时会报错 这个时候可以使用 translate 代替 2.有时候使用 nvl2() 函数的时候会报错 这个时候可以用 case when 来代替

AMC8竞赛第一题很简单?来看看历年的真题体会一下(含详细解析)

作为具有全球影响力的&#xff0c;面向中小学生的数学竞赛&#xff0c;AMC8在中国的知名度和参与人数也越来越多。 和国内的各种数学比赛相比&#xff0c;AMC8有一个很有意思的地方&#xff1a;全部是单项选择题&#xff0c;没有其他题型。所以不用担心做不完&#xff0c;毕竟…

【Angular开发】2023年促进您开发的最佳Angular库

如果你是一名开发人员&#xff0c;你可以理解平台的重要性&#xff0c;它可以加快开发过程&#xff0c;显著减少编码时间和工作量。 根据StackOverflow开发者2021年的调查&#xff0c;Angular是其中一个令人惊叹的平台&#xff0c;它一直赢得人们的喜爱&#xff0c;并获得了全…

被动副业机赚钱项目教程,Docker一键安装教程

被动副业机赚钱项目教程&#xff0c;Docker一键安装教程 Docker一键运行 软件下载 视频教程 /opt/wxedge_storage 路径换成你设备里面的路径即可&#xff0c;其余参数不用变&#xff0c; 镜像名为onething1/wxedge 更多安装说明&#xff0c;可参考官方文档&#xff1a;容器魔…