当前位置: 首页 > news >正文

在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

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

相关文章:

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

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 本节课我们来讲一下如何在pytouch当中去使用我们的tensorboard 对我们的训练过程进行一个可视化 左边有一个visualizing models data and training with tensorboard 主要是这么一个教程 那么这里…...

Redis 命令全解析之 Hash类型

文章目录 ⛄介绍⛄命令⛄RedisTemplate API⛄应用场景 ⛄介绍 Hash类型,也叫散列,其value是一个无序字典,类似于Java中的 HashMap 结构。 String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便&#xf…...

postgresql数据库配置主从并配置ssl加密

1、先将postgresql数据库主从配置好 参考:postgresql主从配置 2、在主节点配置ssl加密,使用navicat测试是否可以连接 参考:postgresql配置ssl 3、正常连接无误后,将root.crt、server.crt、server.key复制到从数据库节点的存储…...

IO多路转接之select

IO多路转接之select 1. IO多路转接(复用)2. select2.1 函数原型2.2 细节描述 3. 并发处理3.1 处理流程3.2 通信代码 原文链接 1. IO多路转接(复用) IO多路转接也称为IO多路复用,它是一种网络通信的手段(机…...

linux如何删除大文件的第一行(sed)

可以用sed命令实现&#xff1a; 删除文档的第一行 1. sed -i 1d <file>删除文档的最后一行 1. sed -i $d <file>在文档指定行中增加一行 # 示例如下&#xff1a; echo "1"; echo "2"; echo "4"; echo "5"; # 想要在echo…...

Navicat 技术指引 | 适用于 GaussDB 分布式的备份/还原功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…...

【广州华锐互动VRAR】VR戒毒科普宣传系统有效提高戒毒成功率

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为人们的生活带来了前所未有的便利。在教育科普领域&#xff0c;VR技术的应用也日益广泛&#xff0c;本文将详细介绍广州华锐互动开发的VR戒毒科普宣传系统&#xff0…...

守护安全,六氟化硫气体泄漏报警装置校准服务

在电力工业中&#xff0c;六氟化硫&#xff08;SF6&#xff09;气体是一种重要的介质&#xff0c;它用作封闭式中、高压开关的灭弧和绝缘气体。六氟化硫气体的卓越性能实现了装置经济化、低维护化的操作。与普通装置相比&#xff0c;可以节省最多90&#xff05;的空间。 六氟化…...

概率测度理论方法(第 2 部分)

一、说明 欢迎回到这个三部曲的第二部分&#xff01;在第一部分中&#xff0c;我们为测度论概率奠定了基础。我们探索了测量和可测量空间的概念&#xff0c;并使用这些概念定义了概率空间。在本文中&#xff0c;我们使用测度论来理解随机变量。 作为一个小回顾&#xff0c;在第…...

实战:Docker Compose 下 Nginx、Java、Mysql 和 Redis 服务协同部署(包含解决浏览器访问Linux部署服务器本地资源问题)

1. 背景 在该实战中&#xff0c;我们将探讨如何使用Docker Compose协同部署Nginx、Java、Mysql和Redis服务&#xff0c;实现一个视频上传与展示的应用。具体需求如下&#xff1a; Java应用负责上传视频和图片资源到Nginx目录下&#xff0c;作为资源服务器。Nginx服务作为静态…...

Docker 设置国内镜像源

Docker 设置国内镜像源 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 具体配置如下&#xff1a; {"registry-mirrors" : ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirro…...

通信协议 远程调用RPC

1.通讯协议 所有的HDFS通讯协议都是建立在TCP/IP协议之上。 客户端通过一个可配置的TCP端口连接到Namenode&#xff0c;通过ClientProtocol协议与Namenode交 互。而Datanode使用DatanodeProtocol协议与Namenode交互。 一个远程过程调用(RPC)模型被抽象出来封装ClientProtoc…...

决策树 算法原理

决策树 算法原理 决策树的原理 决策树: 从训练数据中学习得出一个树状结构的模型 决策树属于判别模型 决策树是一种树状结构&#xff0c;通过做出一系列决策 (选择) 来对数据进行划分&#xff0c;这类似于针对一系列问题进行选择。 决策树的决策过程就是从根节点开始&#…...

Git全局设置命令---设置提交人邮箱

介绍 使用git命令设置提交人邮箱。 命令 git config --global user.email "xxxxxxxx.com"...

3DCAT+上汽奥迪:打造新零售汽车配置器实时云渲染解决方案

在 5G、云计算等技术飞速发展的加持下&#xff0c;云渲染技术迎来了突飞猛进的发展。在这样的背景下&#xff0c;3DCAT应运而生&#xff0c;成为了业内知名的实时云渲染服务商之一。 交互式3D实时云看车作为云渲染技术的一种使用场景&#xff0c;也逐步成为一种新的看车方式&a…...

物联网+AI智慧工地云平台源码(SaaS模式)

智慧工地云平台充分运用数字化技术&#xff0c;聚焦施工现场岗位一线&#xff0c;依托物联网、互联网、AI等技术&#xff0c;围绕施工现场管理的人、机、料、法、环五大维度&#xff0c;以及施工过程管理的进度、质量、安全三大体系为基础应用&#xff0c;实现全面高效的工程管…...

python打开相机,用鼠标左键框选矩形区域,支持一次框选多个矩形区域,通过鼠标右标清除上一次画的矩形。

方案一 import cv2# Global variables rectangles [] current_rectangle [] drawing False# Mouse callback function def mouse_callback(event, x, y, flags, param):global rectangles, current_rectangle, drawingif event cv2.EVENT_LBUTTONDOWN:drawing Truecurren…...

卷积之后通道数为什么变了

通道数增多与卷积之后得到的图像特征数量有关 卷积层的作用本来就是把输入中的特征分离出来变成新的 feature map&#xff0c;每一个输出通道就是一个卷积操作提取出来的一种特征。在此过程中ReLU激活起到过滤的作用&#xff0c;把负相关的特征点去掉&#xff0c;把正相关的留…...

ubuntu18.04安装opencv-4.5.5+opencv_contrib-4.5.5

一、安装opencv依赖 sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-d…...

实验3.5 路由器的单臂路由配置

实验3.5 路由器的单臂路由配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.SWA的基本配置2.RA的基本配置3.在RA上查看接口状态 六、任务验收七、任务小结 一、任务描述 某公司对部门划分了需VLAN之后&#xff0c;发现两个部门之间无法通信&#xff0c;但…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...