安装了pytorch不能import_PyTorch 的可视化工具 Visdom

ad311129844d80db81a66c837030bad6.png

Visdom 是一个专门用于 PyTorch 的交互式可视化工具,可以对实时数据进行丰富的可视化,帮助我们实时监控在远程服务器上进行的科学实验。

Visdom 的可视化可以在浏览器中查看,并且很容易地与其他人进行共享可视化结果。Visdom 的可视化类型种类非常多,大家可以参考下图:

f908c232446f057435da3098595d37fa.png

安装并启动 visdom

安装:pip install visdom

开启 visdom 服务:python -m visdom.server

会出现如下信息:

 Checking for scripts.
 It's Alive!
 INFO:root:Application Started
 You can navigate to http://localhost:8097

如果是在本机开启的服务,则在浏览器中输入http://localhost:8097,如果是在服务器开启的服务,则在本机浏览器中输入http://[server_ip]:8097

此时就会启动 visdom,默认是在 main 环境下:

887e4886b6186e853871e76b217dcb9b.png

如果要同时或者先后训练不同的网络模型,我们可以为每个模型创建一个环境,分别显示它们的可视化结果。

绘制折线图

因为我们在训练网络的时候,想记录训练过程中的损失和准确率的变化,所以主要用到绘制折线图的函数 line()

首先创建包含10个随机数的数组 arr,我对 Python List、Numpy Array 和 PyTorch Tensor 三种类型的数据都绘制折线图。

import torch
from visdom import Visdom
import numpy as np

# 新建名为'demo'的环境
viz = Visdom(env='demo')

arr = np.random.rand(10)

# Numpy Array
viz.line(Y=arr)
# Python List
viz.line(Y=list(arr))
# PyTorch tensor
viz.line(Y=torch.Tensor(arr))

上面的 Y 表示纵坐标,这里没有指定横坐标,则默认横坐标范围为(0,1)。结果如下图所示,可以看到三者的折线图完全相同。

6d7dcdb9461be90efaab10982053785b.png

有时候我们想在一个图中同时显示多条曲线,那么在指定横纵坐标时需要指定多个值。

N = np.linspace(-5, 5, 100)  # 从范围[-5,5]中均匀取100个数
viz.line(
    X=np.column_stack((N, N)),
    Y=np.column_stack((N*N, np.sqrt(N+5))),
    opts=dict(legend=["curv1", "curv2"],
              showlegend=True,
              markers=False,
              title='line demo',
              xlabel='Time',
              ylabel='Volume',
              fillarea=False),
)

可以看到两个曲线的横坐标都为N,纵坐标一个为N*N,另一个为np.sqrt(N+5)。

8fff74a172a234fcfa3cec5d43b893ca.png

这个例子出现了参数 opts,它表示对曲线的一系列操作,先介绍几个常用的,

  • legend:给每条曲线指定名字;
  • showlegend:显示曲线的图例(默认用 1,2,3... 表示);
  • markers:表示是否将每个点用实心圆表示;
  • title:指定该图的标题;
  • fillarea:指定是否对曲线下方进行填充;
  • xlabelylabel:指定横纵坐标名字。

在训练模型时,我们并不是直接对一整个列表的值进行可视化,而是想在训练的过程中,实时绘制随程序运行输出的值(比如损失值和准确率),那么可以用到 update 参数。

指定参数 update 的值为 'append',表示在曲线后面追加,也就能实现实时更新训练曲线。还必须指定参数 win 作为窗口的名字,表示每次追加内容都是在同一个窗口下。

viz = Visdom(env='demo')
x, y = 0, 0
for i in range(50):
    x = i
    y = i*i
    viz.line(
        X = np.array([x]),
        Y = np.array([y]),
        win = 'window',
        update = 'append')

de0a307cecf63da056dafe60d77f138e.png

如果将参数 update 的值指定为 'insert',则表示在该窗口下新添加一条曲线。

如文章最前面的图所示,Visdom 可以显示的图不只是折线图,但是我平时只用到折线图,所以就只介绍这个,想知道其他图用法的话,可以查看官方 Visdom Demo。


如果觉得有用,就点个赞吧(ง •̀_•́)ง。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值