一、简介
Visdom 是 Facebook 专门为Pytorch开发的一款用于创建、组织和共享实时丰富数据的开源可视化工具。支持 Torch 和 Numpy。用户可以通过编程组织可视化空间或者通过用户接口为数据打造仪表板,检查实验结果和调试代码。Visdom是一个Web Sever服务,默认端口绑定8097端口,客户端与服务器端通过tornado进行非阻塞交互。Visdom有两个重要的概念:
- env:环境,不同环境的可视化结果互相隔离,若用户没有在运行程序的代码中指定env,那么默认为env使用main。建议不同用户或者不同程序使用不同的env更好。
- pane:窗格,窗格用于显示程序运行的可视化图像、数值、log等,操作可以拖动、缩放、保存和关闭。一个程序可以使用同一个env(可包含多个pane)中不同的pane,因为每个pane窗格只记录和可视化env中的一类信息。
注意:Visdom支持 Torch的 tensor 和Numpy的 ndarray 两种数据格式,但是不支持 Python的int、float等数据格式,因此数据最后传入 vis 连接客户端前 需将Python的int、float等这些数据 转成 tensor 或者 ndarray 。
二、首先根据自己电脑是否安装python和pip,若没有点击打开下面的文章链接进行安装,安装好了之后,再进行visdom安装操作。
三、首先找到pip安装的文件夹路径,然后在该路径栏输入“cmd”,然后回车键。
四、复制下面的命令行,然后粘贴输入到上步打开的资源管理器,然后回车键运行。然后成功安装visdom。
pip install visdom
五、启动visdom,复制下面的命令行,然后粘贴输入到上步打开的资源管理器,然后不断回车键运行。然后成功运行visdom。
python -m visdom.server
六、打开visdom,复制下面的链接或者直接点击 此处,观察是否出现下面图片中的内容,出现表示visdom打开成功。
http://localhost:8097/
七、复制下面的python代码在Pycharm中运行及结果显示。若没有下载Pycharm可点击下面的链接进行下载安装。
Windows中pycharm最详细安装教程及注意事项:点击打开文章网页
# 一切都是在visdom已经启动后再运行此程序 import visdom import torch as t # 新建一个连接客户端vis vis = visdom.Visdom(env=u'test1') # 指定env,默认端口port还是8097,host默认是'localhost',u表示将后面跟的字符串以unicode格式存储,那么可以识别中文字符 # 数据 x = t.arange(1,30,0.01) y = t.sin(x) # Visdom支持的API中的line,win是指pane的名字,opts接收一个字典可以用来指定标识等 vis.line(X=x,Y=y,win='sinx',opts={'title':'y=sin(x)'})
八、返回第六步打开的网页,跟着下面图片的顺序操作即可看到环境env是test1中的pane。
九、需手动保存env,可在Web界面点击“save”按钮或者在程序中调用save方法,自动以json数据格式保存到路径为:Windows是C:\Users\账户.visdom文件夹中。注意:若没有保存则当visdom服务断开重启之后,未保存的env等信息会直接丢失。
十、客户端对象vis必要信息
1、vis客户端对象,可以使用如下常见的画图函数:
- line:类似 MATLAB 中的 plot 操作,用于记录某些标量的变化,例如损失、准确率等
- image:单图使用image,多图使用images,可视化图片,可以是输入的图片,也可以是 GAN 生成的图片,还可以是卷积核的信息,但是输入的数据格式不一定都要转换为numpy,torch也可以。
- text:用于记录日志等文字信息,支持HTML 格式
- histgram:可视化分布,主要是查看数据、参数的分布
- scatter:绘制散点图
- bar:绘制柱状图
- pie:绘制饼状图
- stem : 绘制茎叶图
- heatmap :绘制 热力图
- mesh : 绘制网格图
2、vis对象画图函数的部分重要属性设置如下:
- win:用于指定pane的名字,如果不指定,visdom将自动分配一个新的pane。如果两次操作指定的win名字一样,新的操作将覆盖当前pane的内容,因此建议每次操作都重新指定win。
- opts:选项,接收一个字典,常见的option包括title、xlabel、ylabel、width等,主要用于设置pane的显示格式。
- updata:之前提到过,每次操作都会覆盖之前的数值,但往往我们在训练网络的过程中需不断更新数值,如损失值等,这时就需要指定参数update='append’来避免覆盖之前的数值。(注意:原来vis.updateTrace方法来更新图的方法已被废弃也就是不能再使用)
十一、复制下面代码在Pycharm运行结果和一直运行的控制平台日志信息及visdom的网页上看显示结果。
(1)line的运用
# line的运用 # 一切都是在visdom已经启动后再运行此程序 import visdom import torch as t # 新建一个连接客户端vis vis = visdom.Visdom(env=u'test1') # 指定env,默认端口port还是8097,host默认是'localhost',u表示将后面跟的字符串以unicode格式存储 # 数据 x = t.arange(1,30,0.01) y = t.sin(x) z = t.cos(x) # # # Visdom支持的API中的line,win是指pane的名字,opts接收一个字典指定标识等 vis.line(X=x,Y=y,win='math',name="old trace",opts={'title':'sin vs cos'}) # # vis.line(X=x,Y=y,win='sinx',opts={'title':'y=cos(x)'}) vis.line(X=x,Y=z,win='math',update='append',name="new trace") # 采用update加一条线
(2)image的运用
# image的运用 # 一切都是在visdom已经启动后再运行此程序 import visdom import torch as t # 新建一个连接客户端vis vis = visdom.Visdom(env=u'test1') # 指定env,默认端口port还是8097,host默认是'localhost',u表示将后面跟的字符串以unicode格式存储 # # 可视化一张随机的二维黑白图片,通道数为1 # vis.image(t.randn(64,64).numpy()) # # 可视化一张随机的二维彩图片,通道数为3 # vis.image(t.randn(3,64,64).numpy(),win="colourful") # 多图使用images,nrow是指每行六张图片 vis.images(t.randn(36,3,64,64),nrow=6,win="colourful64",opts={'title':'colourful64image'})