本文翻译的时候把 略去了 Torch
部分。
项目地址
[外链图片转存失败(img-uSERNfqv-1567829177278)(https://lh3.googleusercontent.com/-bqH9UXCw-BE/WL2UsdrrbAI/AAAAAAAAnYc/emrxwCmnrW4_CLTyyUttB0SYRJ-i4CCiQCLcB/s0/Screen+Shot+2017-03-06+at+10.51.02+AM.png"visdom_big")]
一个灵活的可视化工具,可用来对于 实时,富数据的 创建,组织和共享。支持Torch
和Numpy
。
Visdom
目的是促进远程数据的可视化,重点是支持科学实验。。
向您和您的合作者发送可视化 图像,图片和文本。
通过编程组织您的可视化空间,或者通过UI
为实时数据创建dashboards
,检查实验的结果,或者debug
实验代码。
Visdom
有一组简单的特性,可以用它们组合成不同的用例。
UI
刚开始是个白板–您可以用图像,图片,文本填充它。这些填充的数据出现在 Panes
中,您可以这些Panes
进行 拖放,删除,调整大小和销毁操作。Panes
是保存在 envs
中的, envs
的状态 存储在会话之间。您可以下载Panes
中的内容–包括您在svg
中的绘图。
Tip: 您可以使用浏览器的放大缩小功能来调整UI的大小。
您可以使用envs
对可视化空间进行分区。默认地,每个用户都会有一个叫做main
的envs
。可以通过编程或UI
创建新的envs
。envs
的状态是长期保存的。
您可以通过 url: http://localhost.com:8097/env/main
访问特定的env
。
You can access a specific env via url: http://localhost.com:8097/env/main
. 如果您的服务器是被托管的,那么您可以将此url
分享给其他人,那么其他人也会看到您的可视化结果。
管理 Envs:
在初始化服务器的时候,您的 envs 默认通过$HOME/.visdom/
加载。您也可以将自定义的路径 当作命令行参数 传入。如果您移除了Env文件夹下的.json
文件,那么相应的环境也会被删除。
一旦您创建了一些可视化,状态是被保存的。服务器自动缓存您的可视化–如果您重新加载网页,您的可视化会重新出现。
Save: 你可以手动的保存env
通过点击save
按钮。它会首先序列化env
的状态,然后以json
文件的形式保存到硬盘上,包括窗口的位置。 同样,您也可以通过编程来实现env
的保存。
当面对一些十分复杂的可视化,例如参数设置非常重要,这中保存env
状态的方法是十分有用的。例:数据丰富的演示,模型的训练 dashboard
, 或者 系统实验。这种设计依旧可以使这些可视化十分容易分享和复用。
Fork: 有过您输入了一个新的env
名字,saving
会建立一个心的env
– 有效的forking之前的状态。(注:这个fork等价于github的fork,跟复制的意思差不多)
需要 Python 2.7/3 (and optionally Torch7)
# Install Python server and client,如果您使用python的话,装这一个就可以了。
pip install visdom
启动服务器(可能在screen
或者tmux
中):
python -m visdom.server
一旦启动服务器,您就可以通过在浏览器中输入http://localhost:8097
来访问 Visdom
,localhost
可以换成您的托管地址。
If the above does not work, try using an SSH tunnel to your server by adding the following line to your local
~/.ssh/config
:
LocalForward 127.0.0.1:8097 127.0.0.1:8097
.
import visdom
import numpy as np
vis = visdom.Visdom()
vis.text('Hello, world!')
vis.image(np.ones((3, 10, 10)))
python example/demo.py
Visdom
支持下列API
。由Plotly提供可视化支持。
vis.scatter
: 2D 或 3D 散点图vis.line
: 线图vis.stem
: 茎叶图vis.heatmap
: 热力图vis.bar
: 条形图vis.histogram
: 直方图vis.boxplot
: 箱型图vis.surf
: 表面图vis.contour
: 轮廓图vis.quiver
: 绘出二维矢量场vis.image
: 图片vis.text
: 文本vis.mesh
: 网格图vis.save
: 序列化状态关于上述API
更详尽的解释将在下面给出。为了对visdom
的能力有一个快速的了解,您可以看一下 example ,或者,您可以继续往下看。
这些API
的确切输入类型有所不同,尽管大多数API
的输入包含,一个tensor X
(保存数据)和一个可选的tensor Y
(保存标签或者时间戳)。所有的绘图函数都接收一个可选参数win
,用来将图画到一个特定的window
上。每个绘图函数也会返回当前绘图的win
。您也可以指定 汇出的图添加到哪个env
上。
(这里的window的意思就是之前说的Pane)。
[外链图片转存失败(img-Dkip7io0-1567829177280)(https://lh3.googleusercontent.com/-bqH9UXCw-BE/WL2UsdrrbAI/AAAAAAAAnYc/emrxwCmnrW4_CLTyyUttB0SYRJ-i4CCiQCLcB/s0/Screen+Shot+2017-03-06+at+10.51.02+AM.png"visdom_big")]
画图的方法的接口一般是 plot.some_func(X,Y, opts={})
options.title
options.xlabel
options.ylabel
这个函数是用来画2D
或3D
数据的散点图。它需要输入 N*2
或N*3
的 tensor X
来指定N
个点的位置。一个可供选择的长度为N
的vector
用来保存X
中的点对应的标签(1 到 K)。 – 标签可以通过点的颜色反应出来。
scatter()
支持下列的选项:
options.colormap
: 色图(控制图的颜色) (string
; default = 'Viridis'
)options.markersymbol
: 标记符号 (string
; default = 'dot'
)options.markersize
: 标记大小(number
; default = '10'
)options.markercolor
: 每个标记的颜色. (torch.*Tensor
; default = nil
)options.legend
: 包含图例名字的table
options.markercolor
是一个包含整数值的Tensor
。Tensor
的形状可以是 N
或 N x 3
或 K
或 K x 3
.
N
: 表示每个点的单通道颜色强度。 0 = black, 255 = redN x 3
: 用三通道表示每个点的颜色。 0,0,0 = black, 255,255,255 = whiteK
and K x 3
: 为每个类别指定颜色,不是为每个点指定颜色。这个函数用来画 线图。它需要一个形状为N
或者N×M
的tensor Y
,用来指定 M
条线的值(每条线上有N
个点)。和一个可供选择的 tensor X
用来指定对应的 x轴的值; X
可以是一个长度为N
的tensor(这种情况下,M条线共享同一个 x轴),也可以是形状和Y
一样的tensor。
The following options
are supported:
options.fillarea
: 填充线下面的区域 (boolean
)options.colormap
: 色图 (string
; default = 'Viridis'
)options.markers
: 显示点标记 (boolean
; default = false
)options.markersymbol
: 标记的形状 (string
; default = 'dot'
)options.markersize
: 标记的大小 (number
; default = '10'
)options.legend
: 保存图例名字的 table
这个函数用来画茎叶图。它需要一个 形状为N
或者N*M
的 tensor X
来指定M
时间序列中N
个点的值。一个可选择的Y
,形状为N
或者N×M
,用Y
来指定时间戳,如果Y
的形状是N
,那么默认M
时间序列共享同一个时间戳。
支持以下特定选项:
options.colormap
: colormap (string
; default = 'Viridis'
)options.legend
: table
containing legend names这个函数用来画热力图。它输入一个 形状为N×M
的 tensor X
。X
指定了热力图中位置的值。
支持下列特定选项:
options.colormap
: 色图 (string
; default = 'Viridis'
)options.xmin
: 小于这个值的会被剪切成这个值(number
; default = X:min()
)options.xmax
: 大于这个值的会被剪切成这个值 (number
; default = X:max()
)options.columnnames
: 包含x轴标签的table
options.rownames
: 包含y轴标签的table
这个函数可以画 正常的,堆起来的,或分组的的条形图。
输入参数:
N
或 N×M
,指定每个条的高度。如果X
有M
列,那么每行的值可以看作一组或者把他们值堆起来(取决与options.stacked
是否为True)。N
,指定对应的x轴的值。支持以下特定选项:
options.columnnames
: table
containing x-axis labelsoptions.stacked
: stack multiple columns in X
options.legend
: table
containing legend labels这个函数用来画指定数据的直方图。他需要输入长度为 N
的 tensor X
。X
保存了构建直方图的值。
支持下面特定选项:
options.numbins
: bins
的个数 (number
; default = 30)这个函数用来画箱型图:
输入:
N
或N×M
,指定做第m
个箱型图的N
个值。支持以下特定选项:
options.legend
: labels for each of the columns in X
这个函数用来画表面图:
输入:
N×M
,指定表面图上位置的值.支持以下特定选项:
options.colormap
: colormap (string
; default = 'Viridis'
)options.xmin
: clip minimum value (number
; default = X:min()
)options.xmax
: clip maximum value (number
; default = X:max()
)这个函数用来画轮廓图。
输入:
N×M
,指定了轮廓图中的值支持以下特定选项:
options.colormap
: colormap (string
; default = 'Viridis'
)options.xmin
: clip minimum value (number
; default = X:min()
)options.xmax
: clip maximum value (number
; default = X:max()
)这个函数用来画二维矢量场图。
输入:
N*M
N*M
N*M
N*M
X
与 Y
决定了 箭头的长度和方向。可选的gridX
和gridY
指定了偏移。支持下列特定选项:
options.normalize
: 最长肩头的长度 (number
)options.arrowheads
: 是否现实箭头 (boolean
; default = true
)这个函数用来画 图片。
输入:
C*H*W
)。支持下面特定选项:
options.jpgquality
: JPG quality (number
0-100; default = 100)这个函数 播放一个 video
。
输入: video
的文件名,或者是一个 shape 为L*H*W*C
的 tensor
。这个函数不支持其它特定的功能选项。
注意:使用tensor
作为输入的时候,需要安装ffmpeg
。
能不能播放video
取决你使用的浏览器:浏览器必须要支持Theano codec in an OGG container
。(chrome可以用)。
此函数绘制一个SVG
对象。输入是一个SVG
字符串或 一个SVG
文件的名称。该功能不支持任何特定的功能
options
。
此函数可在文本框中打印文本。输入输入一个text
字符串。目前不支持特定的options
此函数画出一个网格图。
输入:
X(tensor): shape(N*2
或N*3
) 定义N
个顶点
Y(tensor, optional):shape(M*2
或M×3
) 定义多边形
支持下列特定选项:
options.color
: color (string
)options.opacity
: 多边形的不透明性 (number
between 0 and 1)绘图函数使用可选的options
表作为输入。用它来修改默认的绘图属性。所有输入参数在单个表中指定;输入参数是基于输入表中键的匹配。
下列的选项除了对于plot.img
和plot.txt
不可用以外,其他的绘图函数都适用。我们称他为 通用选项。
options.title
: figure titleoptions.width
: figure widthoptions.height
: figure heightoptions.showlegend
: show legend (true
or false
)options.xtype
: type of x-axis ('linear'
or 'log'
)options.xlabel
: label of x-axisoptions.xtick
: show ticks on x-axis (boolean
)options.xtickmin
: first tick on x-axis (number
)options.xtickmax
: last tick on x-axis (number
)options.xtickstep
: distances between ticks on x-axis (number
)options.ytype
: type of y-axis ('linear'
or 'log'
)options.ylabel
: label of y-axisoptions.ytick
: show ticks on y-axis (boolean
)options.ytickmin
: first tick on y-axis (number
)options.ytickmax
: last tick on y-axis (number
)options.ytickstep
: distances between ticks on y-axis (number
)options.marginleft
: left margin (in pixels)options.marginright
: right margin (in pixels)options.margintop
: top margin (in pixels)options.marginbottom
: bottom margin (in pixels)其它的一些选项就是函数特定的选项,在上面API介绍的时候已经提到过。
明确几个名词:
vis=visdom.Visdom(env=''main)
window
使用Visdom
就是在env
中的pane
上画图。