今天,让我们来放松一下大脑,学习点轻松的东西————可视化工具Visdom,它可以让我们在使用PyTorch训练模型的时候,可视化中间的训练情况,无论是loss变化还是中间结果比较。相比干呆呆的瞪着命令行,Visdom让我们的调参之路变得更加生动和活泼了.~
对于一些任务,尤其是难以收敛以及情况复杂的,如果在训练过程中,实时可视化训练情况,将会让我们对训练手段进行及时调整,更好的达到目标,避免不收敛、过拟合以及其它情况。这样,我们就可以在训练指标的判断基础上,加上感性的部分(可视化结果),从而实现双管齐下。
Visdom 是一个由FacebookResearch开发的一个灵活的可视化工具,可用来对实时(live)——如网络训练中产生的结果,富数据(rich data)——如HTML,进行组织和共享。支持Torch和Numpy还有PyTorch。
Visdom 也可以实现远程数据的可视化,对科学实验有很大帮助。我们可以远程的发送图片和数据,并进行在ui界面显示出来,检查实验结果,或者debug。
按照官方的说法,开发Visdom的目的是使得数据(无论是在远程还是本地)的可视化,用以支持和促进科学试验。
Visdom aims to facilitate visualization of (remote) data with an emphasis on supporting scientific experimentation.
Visdom有一些简单的特性,我们可以根据这个特性来构建属于自己的特定的例程(use-cases)。
当你刚刚打开UI会发现,这是个白板,只有一片蓝色,别的啥都没有…。我们可以用图形、图像和文本填充它。注意,无论是文本还是图像、视频,都需要将这些内容放在一个叫做windows的container里面,你可以对这些windows(窗口)拖拽,缩放以及删除。
其中,windows存在于envs,envs的**status(状态)可以跨sessions(会话)**保存。
此外,windows还支持callbacks(回调函数),也就是说,当你在一个windows上输入一些内容, 如果后端写好了对应的处理逻辑,那么callbacks会要求Visdom对象接收前端传来的输入给后端的处理代码,并将处理后的结果返回到前端显示,也就是windows可以支持交互~
UI的左上角,有一条这样的东西:这是可视化空间所在的环境(envs)——可以理解为①中windows所在的context,默认情况下,每个用户会拥有一个叫做main的env。
如果有额外的需求,比如要在不同的环境中展示多种层次的内容,用户可以在UI(前端)或者后端创建新的env。环境变量的状态被长期保存。
可以看到,我们可以在UI任意的切换不同的环境(env)。当你选择了一个新的env,visdom将会向服务器请求存在于该env中的图像。
在**env selector(环境选择器)**后面,有一个小的橡皮擦eraser button,用户可以使用它来清除当前env下的所有内容。如果你的展示是动态的,也就是数据源源不断需要展示,那么后续的图像会 继续展示在此env下。
当你在某些env下创建了一些可视化图像内容后,服务器会自动缓存这些可视化结果(设置checkpoint)。如果你重新加载此页面或者重新打开服务器,这些图像内容会重现的。
当然,你也可以手动的保存这些env的状态:
这个功能挺容易理解的:就是根据你在filter窗口的输入(右上角)对当前env下所有windows的title进行字符串正则匹配,只显示该env下跟输入的图像名字匹配的图像:
我用的是PyTorch 0.4.1,在Python2.7/3.x都可以。Visdom直接可以安装在这个环境下,我的是python3.x,直接pip install visdom
即可。
安装后,不需要代码写好,就可以在命令行里面跑visdom。
启动方法: python -m visdom.server
或者直接敲visdom
,刚执行的时候,会开始下载一些脚本,需要等待一会:
启动起来后,写一段测试代码如下,叫做demo.py
,执行python demo.py
:
import visdom
import numpy as np
vis = visdom.Visdom()
vis.text('Hello, world!')
vis.image(np.ones((3, 10, 10)))
这里,直接上代码,具体关于visdom的各个API的说明,请查看visdom——A flexible tool for creating, organizing, and sharing visualizations of live, rich data. Supports Torch and Numpy.
可以看到,我们可以跟这个带callbacks的windows进行交互:
当然,也可以加载音频和视频啦,还有WebGL等,这里就不展开了。
[1] Visdom 可视化工具 教程 (pytorch)
[2] Visdom 官方说明 (FacebookResearch)