可视化工具Visdom的使用

这篇具有很好参考价值的文章主要介绍了可视化工具Visdom的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Visdom介绍

​ Visdom是Facebook专为PyTorch开发的实时可视化工具包,其作用相当于TensorFlow中的Tensorboard,灵活高效且界面美观。如果想更多了解关于Visdom的使用可以参考官方文档

安装

打开cmd窗口,输入命令即可

pip install visdom

使用

要是用Visdom,需要在终端先开启监控命令,根据显示在浏览器中输入: http://localhost:8097 。监控命令有两种方式:

'''方式1'''
python -m visdom.server
'''方式2'''
直接visdom

界面

可视化工具Visdom的使用

  1. env被保存在$HOME/.visdom/ 这里,里面保存的是.json文件,如果json被删除,相应保存的env也就没了。
  2. 浏览器界面中environment右边可以选择env,默认是main,点击哪个env就会显示对应的绘制。
  3. clear旁边的可以保存env,再右边哪个manage只能保存view,为了将数据保存到本地,只能使用clear旁边将env保存下来

Visdom可视化函数及其参数一览

visdom基本可视化函数

vis.image : #图片
vis.line: #曲线
vis.images : #图片列表
vis.text : #抽象HTML 输出文字
vis.properties : #属性网格
vis.audio : #音频
vis.video : #视频
vis.svg : #SVG对象
vis.matplot : #matplotlib图
vis.save : #序列化状态服务端

上述函数参数

  • 注意opt的参数都可以用python字典的格式传入
opts.title : #图标题
win:#窗口名称
opts.width : #图宽
opts.height : #图高
opts.showlegend : #显示图例 (true or false)
opts.xtype : #x轴的类型 ('linear' or 'log')
opts.xlabel : #x轴的标签
opts.xtick : #显示x轴上的刻度 (boolean)
opts.xtickmin : #指定x轴上的第一个刻度 (number)
opts.xtickmax : #指定x轴上的最后一个刻度 (number)
opts.xtickvals : #x轴上刻度的位置(table of numbers)
opts.xticklabels : #在x轴上标记标签 (table of strings)
opts.xtickstep : #x轴上刻度之间的距离 (number)
opts.xtickfont :#x轴标签的字体 (dict of font information)
opts.ytype : #type of y-axis ('linear' or 'log')
opts.ylabel : #label of y-axis
opts.ytick : #show ticks on y-axis (boolean)
opts.ytickmin : #first tick on y-axis (number)
opts.ytickmax : #last tick on y-axis (number)
opts.ytickvals : #locations of ticks on y-axis (table of numbers)
opts.yticklabels : #ticks labels on y-axis (table of strings)
opts.ytickstep : #distances between ticks on y-axis (number)
opts.ytickfont : #font for y-axis labels (dict of font information)
opts.marginleft : #左边框 (in pixels)
opts.marginright :#右边框 (in pixels)
opts.margintop : #上边框 (in pixels)
opts.marginbottom: #下边框 (in pixels)
opts.lagent=['']#显示图标

应用

实时曲线绘制

  • 方法:起始点+数据点更新
from Visdom import Visdom
vis = Visdom()   #初始化visdom类。
#括号内可以添加参数,如使用“env = ‘环境名称’ ”对绘图环境进行命名。此时在可视化界面需在上方的 Environment中勾选相应的环境名称才可以将图片显示出来。如果没有env,则默认环境名称为main
'''起点'''
vis.line([0.],     #第一个点的Y坐标
         [0.],     #第一个点的X坐标
         win='train loss',  #窗口名称
         opts=dict(title = 'train_loss',xlabel='episodes',ylabel='loss') #图标题、x轴和Y轴标签
         ) #设置起点
'''模型数据'''
vis.line([1.],[1.],       #下一点的Y坐标及X坐标
         win='train loss',  ## 窗口名称 与上个窗口同名表示显示在同一个表格里
         update='append')  # 添加到上一个点的后面

从上图中可以看出:

  1. 窗口名称显示在图片的右上角;
  2. 右下角有一个Edit,点击进去,可以对图片类型等进行修改,甚至可以保存数据;
'''多条曲线绘制 实际上就是传入y值时为一个向量'''
vis = Visdom(env='my wind') # 环境名称为'my wind'
 #设置起始点
vis.line([[0.0,0.0]],    ## Y的起始点
          [0.],    ## X的起始点
         win="test loss",    ##窗口名称
         opts=dict(title='test_loss')  ## 图像标例
        )
'''模型数据'''
vis.line([[1.1,1.5]],   ## Y的下一个点
        [1.],   ## X的下一个点
        win="test loss", ## 窗口名称
        update='append'   ## 添加到上一个点后面

实际应用

'''
导入库文件
'''

import  torch
import  torch.nn as nn
import  torch.nn.functional as F
import  torch.optim as optim
from    torchvision import datasets, transforms
from visdom import Visdom
import numpy as np
'''
构建简单的模型:简单线性层+Relu函数的多层感知机
'''
class MLP(nn.Module):

   def __init__(self):
    super(MLP, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(784, 200),
            nn.ReLU(inplace=True),
            nn.Linear(200, 200),
            nn.ReLU(inplace=True),
            nn.Linear(200, 10),
            nn.ReLU(inplace=True))
    def forward(self, x):
        x = self.model(x)

        return x
batch_size = 128
earning_rate = 0.01
epochs = 10
train_loader = torch.utils.data.DataLoader(datasets.MNIST(
    'D:/data/MNIST', # 
    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(
    'D:/Jupyter/工作准备/data/MNIST',
    train=False,
    transform=transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize((0.1307, ), (0.3081, ))])),
                                          batch_size=batch_size,
                                          shuffle=True)

# 注意此处初始化visdom类
viz = Visdom()
# 绘制起点
viz.line([0.], [0.], win="train loss", opts=dict(title='train_loss'))
device = torch.device('cuda:0')
net = MLP().to(device)
optimizer = optim.SGD(net.parameters(), lr=learning_rate)
criteon = nn.CrossEntropyLoss().to(device)

for epoch in range(epochs):

    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()
       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()))

   test_loss = 0
    correct = 0
    for 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()

    test_loss /= len(test_loader.dataset)
    # 绘制epoch以及对应的测试集损失loss
  	viz.line([test_loss], [epoch], win="train loss", update='append') # win是必须的 
   	print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
   	test_loss, correct, len(test_loader.dataset), correct / len(test_loader.dataset)))

远程显示服务器上的代码结果

  1. 在xshell上运行visdom
  2. 通过浏览器访问远程服务器地址的8097(默认)端口来远程观察模型的训练情况
    • 假设服务器ip为192.168.1.2
    • 在本地浏览器上打开192.168.1.2:8097即可观察到训练结果

暂停与恢复

经常需要的一个功能是,train到一个阶段,暂停/终止训练,下次训练想从断点处继续。因为visdom正常会用新图覆盖原来的图,所以要在这里读取以前的数据,然后接着绘制数据。

第一步需要保存env,env被保存在$HOME/.visdom/ 这里,里面保存的是.json文件,如果json被删除,相应保存的env也就没了。

保存方式如下:

浏览器中的界面,点击manage environment——设置环境名——fork——save(这里的fork意指保存json文件,即保存在$HOME/.visdom/ 这里)。保存完并没有什么提示,而且保存界面不会消失,很奇怪,为了保险反正每次点完等一小会吧。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NNH1RBiU-1659922203818)(https://cdn.jsdelivr.net/gh/Yicen-y/Markdown_image@main/images/20210402213453.png)]

保存完之后,从代码中获取visdom保存的数据。使用如下代码可以获得之前保存下来的数据文章来源地址https://www.toymoban.com/news/detail-499242.html

vis=Visdom(port=8888)
print(vis.get_env_list())
# 可以得到保存的env list
print(vis.win_exists(win="train",env="main1.0"))
# 可以查看指定win是否存在,此处win不是保存的view的名字,可是代码中指定的win
win_data=vis.get_window_data(win="train",env="main1.0")
# 可以获得指定win数据,即我们想恢复的数据,但是要指定号win和env要不然会是None
# 返回的是str数据,但是其实可以使用json来处理,因为数据本来就是储存在json中的
pre_data= json.loads(win_data)
# 这样就将str转换回dict,可以更方便的处理了
xdata=pre_data["content"]["data"][0]["x"]
ydata=pre_data["content"]["data"][0]["y"]
# 得到横纵轴的数据,是float数据的list
  1. 将旧数据与新数据拼接在一起,共同绘制。。在保存在本地中的json中读取数据继续绘制。
 with open("$HOME/.visdom/main1.0.json","r") as f:predata=json.load(f)
# 当然此处地址不能直接写$HOME,应该用正确的地址,剩下的就和上面的处理一样了
  1. 数据拼接
ydata.append(0.5)
vis.line(
       X=np.arange(len(ydata)),
       Y=np.array(ydata),
       opts=dict(title="try"),
       win="little"
)
  1. 配合matplotlib画折线
import matplotlib.pyplot as plt
from visdom import Visdom
   
viz=Visdom(port=8888)   #(需要先在cmd中激活python -m visdom.server -port 8888)
plt.plot([1,2,3,4])  #默认给定的是y轴数据,x轴会自动从0补全
plt.plot([10,20,30,40])  #默认给定的是y轴数据,x轴会自动从0补全
#plt.axis([0,1,0,3]) 可以使用这个分别指定x轴的起始终止、y轴的起始终止
plt.title("折线")
viz.matplot(plt)

参考

  1. 轻松学 Pytorch–Visdom 可视化
  2. Pytorch中文网
  3. Visdom官方Github指南
  4. Visdom PyTorch可视化工具(https://www.cnblogs.com/luckforefforts/p/13736158.html#visdom-pytorch可视化工具)https://www.cnblogs.com/luckforefforts/p/13736158.html (这个帖子讲了环境的保存和重新载入)

到了这里,关于可视化工具Visdom的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity可视化Shader工具ASE介绍——6、通过例子说明ASE节点的连接方式

    阿赵的Unity可视化Shader工具ASE介绍目录   大家好,我是阿赵。继续介绍Unity可视化Shader编辑插件ASE的用法。上一篇已经介绍了很多ASE常用的节点。这一篇通过几个小例子,来看看这些节点是怎样连接使用的。   这篇的内容可能会比较长,最终是做了一个遮挡X光的效果,不

    2024年02月07日
    浏览(37)
  • 图可视化工具Gephi使用教程

    在论文写作和数据分析时,我们时常需要做信息的关联分析。例如舆论传播(A发布消息引爆舆论 - B,C,D转发,结果C的转发造成了舆论的进一步发酵)这样的舆情分析;科研成果下沉(A在Nature发表了重磅研究结果,B,C两大巨头纷纷入局,B在A的基础上发表了10篇成果,C在

    2024年02月04日
    浏览(62)
  • Git 可视化工具 Fork 使用指南

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/125135486 本文出自【赵彦军的博客】 最近遇到一个新项目,经过数年的积累,大概有 30000 个分支,用可视化工具打开直接卡死。 由于分支实在是太多了,一般的可视化工具,直接卡死,比如 Sourcetree 就直接卡死,测试了

    2024年01月25日
    浏览(43)
  • Kafka可视化工具-Offset Explorer使用

    感谢点赞和关注 ,每天进步一点点!加油! 目录 一、概述 二、环境信息 三、安装和使用 3.1 下载Offset Explorer 和安装 3.2 软件配置 3.2.1Properties 3.2.2Properties 3.2.3Advanced 3.2.4 JAAS config 3.2.5修改配置文件 3.3 基本使用 3.3.1查看topic分区列表及分区leader位置信息 3.3.2查看数据 Offset E

    2023年04月20日
    浏览(37)
  • 数据可视化diff工具jsondiffpatch使用学习

    jsondiffpatch 是一个用于比较和生成 JSON 数据差异的 JavaScript 库。它可以将两个 JSON 对象进行比较,并生成一个描述它们之间差异的 JSON 对象。这个差异对象可以用于多种用途,例如: 生成可视化的差异报告 应用差异到另一个 JSON 对象,从而完成更新 将差异对象转换为文本格

    2024年02月12日
    浏览(83)
  • InfluxDB 2 介绍与使用 flux查询 数据可视化

    相比V1 移除了database 和 RP,增加了bucket。 V2具有以下几个概念: timestamp、field key、field value、field set、tag key、tag value、tag set、measurement、series、point、bucket、bucket schema、organization 新增的概念: bucket:所有 InfluxDB 数据都存储在一个存储桶中。一个桶结合了数据库的概念和存储

    2024年02月02日
    浏览(44)
  • 如何在IDEA可视化工具中使用Git

    通过Git命令可以完成Git相关操作,为了简化操作过程,我们可以在IEDA中配置Git,配置好后就可以在IDEA中通过图形化的方式来操作Git。 5.1 在IDEA中配置Git 在IDEA中使用Git,本质上还是使用的本地安装的Git软件,所以需要提前安装好Git并在IDEA中配置Git。 Git安装目录: 解释说明:

    2024年01月22日
    浏览(42)
  • 【使用DataEase数据可视化分析工具访问cpolar】

    DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。 在本地搭建后,借助cpolar 内网穿透实现远程公网地址即可访问

    2024年02月10日
    浏览(42)
  • ES的可视化工具-Kibana的安装和使用

        Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来。     下面是Kibana的安装步骤,控制台可以非常方便的来调用es的api,强

    2024年02月12日
    浏览(41)
  • 【可视化工具】Kafka-Offset Explorer使用

    感谢点赞和关注 ,每天进步一点点!加油! 目录 一、概述 二、环境信息 三、安装和使用 3.1 下载Offset Explorer 和安装 3.2 软件配置 3.2.1Properties 3.2.2Properties 3.2.3Advanced 3.2.4 JAAS config 3.2.5修改配置文件 3.3 基本使用 3.3.1查看topic分区列表及分区leader位置信息 3.3.2查看数据 Offset E

    2024年01月16日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包