Pytorch使用Visdom可视化

Visdom

Visdom是Pytorch自带的一个可视化工具,能够在训练神经网络的过程中,将一些数据进行可视化。目前Visdom可以支持Numpy和Torch。

安装

1
$ pip install visdom

启动服务

1
$ python -m visdom.server

默认的端口号为8097,如果需要更改端口号,可以加入-p选项

两个概念

使用Visdom需要区分其中的一些概念,以将可视化环境分隔开

Panes

Panes即窗格,其中可以显示具体的数据可视化内容。Panes可以进行拖放、删除等操作。

panes

env

env即Environment。Pane存放在env中,一个env中可以存放多个pane。默认的env为main,可以在初始化Visdom的时候指定env,如

1
2
3
from visdom import Visdom

vis = Visdom()

此时默认环境为main

而假设想将环境改为loss

1
2
3
from visdom import Visdom

vis = Visdom(env='loss')

则此时的visdom环境变成了loss

几个API

Visdom中提供了不同的API,来绘制不同类型的图像。

plot.scatter

plot.scatter 用来绘制2D或者3D的散点图,需要输入N * 2或者N * 3的tensor X来确定N个点的位置。

plot.line

这个API可以用来绘制线条。它需要一个形状为N或者N*M的tensorY,用来指定M条线的值(每条线上有N个点),和一个可选的tensorX来指定X轴的值。X可以是一个长度为N的tensor(此时M条线共享一个X),也可以是一个形状和tensorY相同的tensor。

plot.image

这个API用来画图像。输入

1
img(tensor):shape(C * H * W)

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from visdom import visdom
import numpy as np

vis = Visdom(env='test')
win = vis.line(
X=np.zeros(1),
Y=np.zeros(1),
opts=dict(title='test_random')
)
for i in range(100):
vis.line(
X=np.array([i]),
Y=np.random.randn(1),
win=win,
update='append'
) # win要和之前的win保持一致,update选择append不会覆盖之前的数据

效果:

test

远程使用Visdom

很多时候训练神经网络并不是在自己的电脑上进行,而是在远端的服务器上进行。下面介绍如何连接查看服务器端的visdom

SSH连接

在命令行中输入

1
ssh -L 18097:127.0.0.1:8097 username@remote_ip

其中,18097:127.0.0.1代表自己机器上的端口号,8097是服务器上visdom的端口号。username是在远程服务器上的用户名,remote_ip是服务器的ip地址。

效果:
remote

启动visdom服务器

同上面介绍的一样,在服务器端启动visdom服务,输入

1
$ python -m visdom.server

在本地浏览器中浏览

启动完远程的visdom服务之后,在本地浏览器中输入

1
127.0.0.1:18097

即可访问服务器端的visdom


Pytorch使用Visdom可视化
https://thumarklau.github.io/2018/03/11/visdom-1/
作者
Xuxin Liu
发布于
2018年3月11日
许可协议