文章目录
- 1. visdom概述
- 1.1 Visdom中有两个重要概念:
- 1.2 Visdom的使用有两点需要注意的地方:
- 2. 使用步骤:
- 3. 参数详解
- 4.参考
1. visdom概述
Visdom
可以创造、组织和共享多种数据的可视化,包括数值、图像、文本,甚至是视频,其支持Torch
及Numpy
。用户可通过编程组织可视化空间,或通过用户接口为生动数据打造仪表板,检查实验结果或调试代码。
1.1 Visdom中有两个重要概念:
-
env
:环境。不同环境的可视化结果相互隔离,互不影响,在使用时如果不指定env
,默认使用main
。不同用户、不同程序一般使用不同的env
。 -
pane
:窗格。窗格可用于可视化图像、数值或打印文本等,其可以拖动、缩放、保存和关闭。一个程序中可使用同一个env
中的不同pane
,每个pane
可视化或记录某一信息。
1.2 Visdom的使用有两点需要注意的地方:
- 需手动指定保存
env
,可在web
界面点击save
按钮或在程序中调用save
方法,否则visdom
服务重启后,env
等信息会丢失。 - 客户端与服务器之间的交互采用
tornado
异步框架,可视化操作不会阻塞当前程序,网络异常也不会导致程序退出.
2. 使用步骤:
Visdom
的安装可通过命令pip install visdom
。安装完成后,需通过python -m visdom.server
命令启动visdom
服务,或通过nohup python -m visdom.server &
命令将服务放至后台运行。Visdom
服务是一个web server
服务,默认绑定8097
端口,客户端与服务器间通过tornado
进行非阻塞交互。
1.安装visdom
:pip install visdom
2.在shell
下,输入:python -m visdom.server
,则开启web
服务。
出现:
在浏览器输入:http://localhost:8097 ,即跳出界面。
3.在pycharm
运行以下程序:
import torch
import visdom
# 新建一个连接客户端
# 默认端口为8097,host是‘localhost'
vis = visdom.Visdom(env='test')
x = torch.arange(1,20,0.1)
y = torch.cos(x)
vis.line(X=x, Y=y, win='cosx', opts={'title':'y=cos(x)'})
4.在网页中选env
为test
点击clear
按钮可以清空当前env
的所有pane
,点击save
按钮可将当前env
保存成json
文件,保存路径位于~/.visdom/
目录下。也可修改env
的名字后点击fork
,保存当前env
的状态至更名后的env
。
使visdom
断开的方法:点击online
变成offline
这样此时visdom
的状态是断开的,不会响应命令 。
3. 参数详解
Visdom以Plotly
为基础,支持丰富的可视化操作。
-
vis = visdom.Visdom(env=u'test1')
,用于构建一个客户端,客户端除指定env
之外,还可以指定host
、port
等参数。 -
vis
作为一个客户端对象,可以使用常见的画图函数,包括:
-
line
:类似Matlab
中的plot
操作,用于记录某些标量的变化,如损失、准确率等; -
image
:可视化图片,可以是输入的图片,也可以是GAN
生成的图片,还可以是卷积核的信息; -
text
:用于记录日志等文字信息,支持html
格式 -
histgram
:可视化分布,主要是查看数据、参数的分布 -
scatter
:绘制散点图 -
bar
:绘制柱状图 -
pie
:绘制饼状图 - 更多操作可参考
visdom
的github
主页
这里主要介绍深度学习中常见的line
、image
和text
操作。
Visdom
同时支持PyTorch
的tensor
和Numpy
的ndarray
两种数据结构,但不支持Python
的int
、float
等类型,因此每次传入时都需先将数据转成ndarray
或tensor
。上述操作的参数一般不同,但有两个参数是绝大多数操作都具备的:
-
win
:用于指定pane
的名字,如果不指定,visdom
将自动分配一个新的pane
。如果两次操作指定的win
名字一样,新的操作将覆盖当前pane
的内容,因此建议每次操作都重新指定win
。 -
opts
:选项,接收一个字典,常见的option
包括title
、xlabel
、ylabel
、width
等,主要用于设置pane
的显示格式。
之前提到过,每次操作都会覆盖之前的数值,但往往我们在训练网络的过程中需不断更新数值,如损失值等,这时就需要指定参数update='append'
来避免覆盖之前的数值。而除了使用update
参数以外,还可以使用vis.updateTrace
方法来更新图,但updateTrace
不仅能在指定pane
上新增一个和已有数据相互独立的Trace
,还能像update='append'
那样在同一条trace
上追加数据。
import torch
import visdom
vis = visdom.Visdom(env='test1')
x = torch.arange(1,30,0.01)
y = torch.sin(x)
vis.line(X=x,Y=y,win='sinx',opts={'title':'y=sin(x)'})
# 可视化一个随机的黑白图片
vis.image(torch.randn(64, 64).numpy(), win='random1')
# 随机可视化一张彩色图片
vis.image(torch.randn(3, 64, 64).numpy(), win='random2')
# 可视化36张随机的彩色图片,每一行6张
vis.images(torch.randn(36, 3, 64, 64).numpy(), nrow=6, win='random3', opts={'title':'random_imgs'})
vis.text(u'''<h1>Hello Visdom</h1><br>Visdom是Facebook专门为<b>PyTorch</b>开发的一个可视化工具,
在内部使用了很久,在2017年3月份开源了它。
Visdom十分轻量级,但是却有十分强大的功能,支持几乎所有的科学运算可视化任务''',
win='visdom',
opts={'title': u'visdom简介'}
)