【pytorch24】Visdom可视化

TensorboardX

pytorch有一个工具借鉴了tensorboard

pip install tensorboardX
在这里插入图片描述
有查看变量的数值、监听曲线等功能

如何使用
在这里插入图片描述
新建SummaryWriter()实例

要把监听的数据,比如说要监听dummy_s1[0](y
坐标)存放到data/scalar1中,n_iter是哪一个epoch的(即x坐标,n_iter时间戳的数据)

tensorboard本质上是抽取numpy的数据,如果要跟tensor直接做转换的话,需要把tensor转换到cpu上

Visdom

visdom可以接收tensor,且运行效率更高,因为tensorboard会把数据写到文件里面去,经常会导致监听文件非常大
在这里插入图片描述
如何安装visdompip install visdom

安装完成之后需要开启监听的进程,visdom本质上是可一个web服务器,程序向web服务器丢数据,这个web服务器会把数据渲染到网页上去
,因此确保程序在运行之前要确保开启visdompython -m visdom.server

在这里插入图片描述
在windows上可能会遇到这个问题

如果遇到这个问题,从0开始安装

  1. 先把现在安装的visdom卸载pip unstall visdom
  2. 从官方网页下载最新的源代码visdom
  3. 进入visdom目录中运行pip install -e.

在这里插入图片描述

这样安装会省略很多麻烦

退回到用户目录运行python -m visdom.server
在这里插入图片描述
在这里插入图片描述

功能

画一条曲线,比如train loss

在这里插入图片描述
创建一条直线viz.line([0.],[0.],win='train_loss',opts=dict(title='train loss')) 首先给一个初始的点,这里只有一个点,第一个[0.]的意思是Y赋值为0,第二个[0.]的意思是X赋值为0,win是一个唯一的标识符可以理解为id,还有另外一个id叫env,visdom每一个大的窗口是一个env,这个窗口可以理解为程序,一个程序里面可能有很多小窗口,env不指定的话默认是main,会在main窗口里面创建小窗口,查询现有的窗口有没有train_loss这个id,没有的话就会创建一个win,opts会配置额外的配置信息,比如把窗口名字命名成train_loss,可以很好的识别倒是的train_loss,还是test_loss

通过这句话会创建一个train_loss窗口,点只有[0,0]

viz.line([loss.item()],[global_step],win='train loss',update='append'),在训练的时候把数据逐步添加进去,X坐标是[global_step](时间戳),Y坐标是[loss.item()],对于非image数据传入的还是一个numpy数据,但是image可以直接接收tensor,需要指定update操作时append,添加在当前的直线后面
在这里插入图片描述

多条曲线

在这里插入图片描述
一个曲线占用一个窗口的话,会使得窗口非常多

比如要同时看train loss 和 test loss,此时Y要同时传入两个数值[Y1,Y2],legend接收list,代表了Y1的label和Y2的label

在这里插入图片描述
两条线范围不一样,loss是0到100,accuracy是0到1,看起来会很奇怪

visual X

可视化

在这里插入图片描述
data是[batch,1,28,28]的tensor,如果使用tensorboardX的话必须复制到cpu上,即.cpu().numpy()数据才能传给tensorboard

还可以看字符串,把pred的值转换成string类型
在这里插入图片描述

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transformsfrom visdom import Visdomdef load_data(batch_size):train_loader = torch.utils.data.DataLoader(datasets.MNIST('mnist_data', train=True, download=True,transform=transforms.Compose([transforms.ToTensor(),# transforms.Normalize((0.1307,), (0.3081,))])),batch_size=batch_size, shuffle=True)test_loader = torch.utils.data.DataLoader(datasets.MNIST('mnist_data', train=False, transform=transforms.Compose([transforms.ToTensor(),# transforms.Normalize((0.1307,), (0.3081,))])),batch_size=batch_size, shuffle=True)return train_loader, test_loaderclass MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.model = nn.Sequential(nn.Linear(784, 200),nn.LeakyReLU(inplace=True),nn.Linear(200, 200),nn.LeakyReLU(inplace=True),nn.Linear(200, 10),nn.LeakyReLU(inplace=True),)def forward(self, x):x = self.model(x)return xdef training(train_loader, device, net, viz, global_step):for batch_idx, (data, target) in enumerate(train_loader):data = data.view(-1, 28 * 28)data, target = data.to(device), target.cuda()logits = net(data)loss = criteon(logits, target)optimizer.zero_grad()loss.backward()# print(w1.grad.norm(), w2.grad.norm())optimizer.step()global_step += 1viz.line([loss.item()], [global_step], win='train_loss', update='append')if batch_idx % 100 == 0:print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader),loss.item()))def testing(test_loader, device, net, viz, global_step):test_loss = 0correct = 0for data, target in test_loader:data = data.view(-1, 28 * 28)data, target = data.to(device), target.cuda()logits = net(data)test_loss += criteon(logits, target).item()pred = logits.argmax(dim=1)correct += pred.eq(target).float().sum().item()viz.line([[test_loss, correct / len(test_loader.dataset)]],[global_step], win='test', update='append')viz.images(data.view(-1, 1, 28, 28), win='x')viz.text(str(pred.detach().cpu().numpy()), win='pred',opts=dict(title='pred'))test_loss /= len(test_loader.dataset)print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(test_loss, correct, len(test_loader.dataset),100. * correct / len(test_loader.dataset)))global netif __name__ == '__main__':batch_size = 200learning_rate = 0.01epochs = 10train_loader, test_loader = load_data(batch_size)device = torch.device('cuda:0')net = MLP().to(device)optimizer = optim.SGD(net.parameters(), lr=learning_rate)criteon = nn.CrossEntropyLoss().to(device)# 需要启动Visdom# python -m visdom.serverviz = Visdom()viz.line([0.], [0.], win='train_loss', opts=dict(title='train loss'))viz.line([[0.0, 0.0]], [0.], win='test', opts=dict(title='test loss&acc.',legend=['loss', 'acc.']))global_step = 0for epoch in range(epochs):training(train_loader, device, net, viz, global_step)testing(test_loader, device, net, viz, global_step)

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

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

相关文章

【React】React18 Hooks 之 useContext

目录 useContext1、Provider和 useContext2、Provider 和Consumer3、Provider 嵌套4、React.createContext提供的Provider和class的contextType属性5、读、写Context(1)父组件修改Context(2)子组件修改Context 好书推荐 useContex…

NPDP有什么价值?究竟值不值得去考?

NPDP其实就是产品经理国际资格认证,是美国产品开发管理协会发起的,集理论、方法和实践一体,在新产品开发方面有一个很全面的知识体系。是国际公认的新产品开发专业认证,具有权威性。 NPDP能够很好地帮你在做新产品的道路上少走弯…

【已解决】腾讯云安装了redis,但是本地访问不到,连接不上

汇总了我踩过的所有问题。 查看配置文件redis.conf 1、把bind 127.0.0.1给注释掉(前面加个#就是)或者改成bind 0.0.0.0,因为刚下载时它是默认只让本地访问。(linux查找文档里的内容可以输入/后面加需要匹配的内容,然后…

clickhouse-jdbc-bridge rce

clickhouse-jdbc-bridge 是什么 JDBC bridge for ClickHouse. It acts as a stateless proxy passing queries from ClickHouse to external datasources. With this extension, you can run distributed query on ClickHouse across multiple datasources in real time, whic…

Java基础-组件及事件处理(上)

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 Swing 概述 MVC 架构 Swing 特点 控件 SWING UI 元素 JFrame SWING 容器 说明 常用方法 示例&a…

服务器信息获取工具

功能介绍 SSH连接到远程服务器: 用户可以输入目标服务器的IP地址、用户名、密码以及SSH端口(默认22)。 工具会尝试连接到远程服务器,并在连接失败时显示错误信息。 运行命令并返回输出: 工具可以在远程服务器上运…

python (必看)10个提升接口自动化编写效率的脚本!

亲爱的开发者们,👋 在快速迭代的软件开发周期中,接口自动化测试扮演着至关重要的角色。今天,我们将分享10个实用的Python小脚本,它们能够显著提升你编写接口自动化测试的效率。无论是初学者还是资深工程师,…

算法体系-26 第二十六节:第26节:单调栈结构 (5节)

一 单调栈知识讲解 1.1描述 一个数组里面想的到每个位置与他最近的左边和右边比他小的最近的信息 1.2 分析 通过单调栈的特点,for遍历数组中的每个数,当前数来的时候对比单调栈中的数进行每个数的左右判断完满足条件的进行更新到当前i种的 int[][] re…

采用3种稀疏降噪模型对心电信号进行降噪(Matlab R2021B)

心电信号采集自病人体表,是一种无创性的检测手段。因此,心电信号采集过程中,本身也已经包含了机体内部其他生命活动带来的噪声。同时,由于采集设备和环境中存在电流的变化,产生电磁发射等物理现象,会对心电…

学习测试7-ADB的使用

ADB是什么? ADB,即 Android Debug Bridge(安卓调试桥) 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell&…

最新全国1-5级标准河流水系矢量数据

2023最新全国一级~五级标准河流水系 shp 矢量数据 2023最新全国一级~五级标准河流水系 shp 矢量数据 Arcgis 五级河流水系全国合集和按省区分 坐标系:wgs84 更新年份:2023年 包含20230SM提取全国超详细水体 Arcgis 矢量数据&a…

TIA博途与威纶通触摸屏无实物仿真调试的具体方法示例

TIA博途与威纶通触摸屏无实物仿真调试的具体方法示例 准备条件: TIA PORTAL V16 S7-PLCSIM V16 EasyBuilderPro V6.9.1 NetToPLCsim V1.2.5 如有需要,可以在这个链接中下载 NetToPLCSim - Browse Files at SourceForge.net538 weekly downloads3 weekly downloads12 weekly d…

R包:蛋白质组学质控评估PTXQC包

介绍 PTXQC包是2016年发表在J Proteome Res期刊上的R包,它主要是对MaxQuant输出结果进行提取处理从而获得评估蛋白质质量结果。 安装 从github安装,安装过程会自动构建tutorial。 devtools::install_github("cbielow/PTXQC", build_vignet…

AI数字人直播saas系统源码部署火爆!无人直播系统全攻略

随着直播行业的日益兴盛,各种直播模式和玩法不断涌现。其中,AI数字人直播更是凭借着其在降本增效的独特优势而在众多直播模式中脱颖而出,成为了众多企业已经引进或计划引进的新型技术。而各大数字人源码厂商推出的AI数字人直播saas系统源码部…

走拼箱货必看海运拼箱的实用技巧

在国际海运运输中,海运拼箱适用于货物数量较少或体积不足以填满整个集装箱的情况。 海运拼箱货物通常由物流公司或货代进行组织和管理。多个货主的货物通过合理拼装,使集装箱空间得到充分利用。 那么,在海运拼箱和整柜有哪些不同&#xff0c…

Linux -- 认识gcc/g++、代码的编译过程

目录 前言: 使用 gcc/g: 代码的编译过程: 预处理: 头文件展开: 宏替换去注释: ​编辑 条件编译: 编译: 汇编: 链接: 动态库(动态链…

使用Simulink基于模型设计(二):系统定义和布局

Simulink模型的顶层系统布局是许多工程团队可以使用的公共环境,是基于模型的设计范式:分析、设计、检验和实现。您可以通过确定模型的结构和各个组件来定义顶层系统。然后,您可以将模型按照层次结构进行组织,分别与系统的各个组件…

【鸿蒙学习笔记】交互事件

官方文档:交互事件 目录标题 分类交互事件-触屏交互事件-手势事件单一手势 分类 交互事件-触屏 在组件上按下(Down) , 滑动(Move) , 抬起(up)时触发的回调事件。包括点击事件、触摸事件和拖拽事件 交互事件-手势事件 在手机上点击打开应用 , 长按后拖动应用 , 这…

自动化数据集成的BI工具,为你提供决策洞察力

传统的商业智能(BI)报表系统采用的是“业务提报表需求,IT进行开发”的模式。决策管理者和业务人员提出用报表等来展示经营管理数据的需求;接着IT响应需求,进行需求沟通、数据处理加工、报表开发等主体工作;…

RFID资产管理系统 RFID固定资产管理系统

大多数企业都曾被固定资产管理“难”的问题困扰:账物不符、查询不便、盘点耗时……因此,越来越多的企业选择用资产管理系统,来实现资产智能化管理。 RFID资产管理系统方案是针对大多数企业存在的资产管理痛点,采用RFID技术&#…