PytTorch視覺化工具 visdom
一個靈活的視覺化工具,可用來對於 實時,富資料的 建立,組織和共享。支援Torch
和Numpy
。
- 總覽
- 基本概念
- Setup
- 啟動
- 視覺化介面
- 總結
總覽
Visdom
目的是促進遠端資料的視覺化,重點是支援科學實驗。。向您和您的合作者傳送視覺化 影象,圖片和文字。
通過程式設計組織您的視覺化空間,或者通過
UI
為實時資料建立dashboards
,檢查實驗的結果,或者debug
實驗程式碼。 -
基本概念
Visdom
有一組簡單的特性,可以用它們組合成不同的用例。Panes(窗格)
UI
剛開始是個白板–您可以用影象,圖片,文字填充它。這些填充的資料出現在Panes
Panes
進行 拖放,刪除,調整大小和銷燬操作。Panes
是儲存在envs
中的,envs
的狀態 儲存在會話之間。您可以下載Panes
中的內容–包括您在svg
中的繪圖。Tip: 您可以使用瀏覽器的放大縮小功能來調整UI的大小。
Environments(環境)
您可以使用
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
檔案,那麼相應的環境也會被刪除。State(狀態)
一旦您建立了一些視覺化,狀態是被儲存的。伺服器自動快取您的視覺化–如果您重新載入網頁,您的視覺化會重新出現。
-
Save: 你可以手動的儲存
env
通過點選save
按鈕。它會首先序列化env
的狀態,然後以json
檔案的形式儲存到硬碟上,包括視窗的位置。 同樣,您也可以通過程式設計來實現env
env
狀態的方法是十分有用的。例:資料豐富的演示,模型的訓練dashboard
, 或者 系統實驗。這種設計依舊可以使這些視覺化十分容易分享和複用。 -
Fork: 有過您輸入了一個新的
env
名字,saving
會建立一個心的env
– 有效的forking之前的狀態。(注:這個fork等價於github的fork,跟複製的意思差不多) -
Setup
需要 Python 2.7/3 (and optionally Torch7)
# Install Python server and client,如果您使用python的話,裝這一個就可以了。 pip install visdom
- 1
- 2
- 3
-
啟動
啟動伺服器(可能在
screen
或者tmux
中):python -m visdom.server
- 1
-
一旦啟動伺服器,您就可以通過在瀏覽器中輸入
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
.Python example
import visdom import numpy as np vis = visdom.Visdom() vis.text('Hello, world!') vis.image(np.ones((3, 10, 10)))
- 1
- 2
- 3
- 4
- 5
-
Demos
python example/demo.py
- 1
-
視覺化介面
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
的輸入包含,一個tensorX
(儲存資料)和一個可選的tensorY
(儲存標籤或者時間戳)。所有的繪圖函式都接收一個可選引數win
,用來將圖畫到一個特定的window
上。每個繪圖函式也會返回當前繪圖的win
。您也可以指定 匯出的圖新增到哪個env
上。 (這裡的window的意思就是之前說的Pane)。plot.scatter
這個函式是用來畫
2D
或3D
資料的散點圖。它需要輸入N*2
或N*3
的 tensorX
來指定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
. - Tensor of size
N
: 表示每個點的單通道顏色強度。 0 = black, 255 = red - Tensor of size
N x 3
: 用三通道表示每個點的顏色。 0,0,0 = black, 255,255,255 = white - Tensor of size
K
andK x 3
: 為每個類別指定顏色,不是為每個點指定顏色。 -
plot.line
這個函式用來畫 線圖。它需要一個形狀為
N
或者N×M
的tensorY
,用來指定M
條線的值(每條線上有N
個點)。和一個可供選擇的 tensorX
用來指定對應的 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
-
plot.stem
這個函式用來畫莖葉圖。它需要一個 形狀為
N
或者N*M
的 tensorX
來指定M
時間序列中N
個點的值。一個可選擇的Y
,形狀為N
或者N×M
,用Y
來指定時間戳,如果Y
的形狀是N
,那麼預設M
時間序列共享同一個時間戳。支援以下特定選項:
options.colormap
: colormap (string
; default ='Viridis'
)options.legend
:table
containing legend names-
plot.heatmap
這個函式用來畫熱力圖。它輸入一個 形狀為
N×M
的 tensorX
。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
-
plot.bar
-
這個函式可以畫 正常的,堆起來的,或分組的的條形圖。 輸入引數:
- X(tensor):形狀
N
或N×M
,指定每個條的高度。如果X
有M
列,那麼每行的值可以看作一組或者把他們值堆起來(取決與options.stacked
是否為True)。 - Y(tensor, optional):形狀
N
,指定對應的x軸的值。 -
支援以下特定選項:
options.columnnames
:table
containing x-axis labelsoptions.stacked
: stack multiple columns inX
options.legend
:table
containing legend labels-
plot.histogram
-
這個函式用來畫指定資料的直方圖。他需要輸入長度為
N
的 tensorX
。X
儲存了構建直方圖的值。支援下面特定選項:
options.numbins
:bins
的個數 (number
; default = 30)-
plot.boxplot
-
這個函式用來畫箱型圖:
輸入:
- X(tensor): 形狀
N
或N×M
,指定做第m
個箱型圖的N
個值。 -
支援以下特定選項:
options.legend
: labels for each of the columns inX
-
plot.surf
這個函式用來畫表面圖: 輸入:
- X(tensor):形狀
N×M
,指定表面圖上位置的值. -
支援以下特定選項:
options.colormap
: colormap (string
; default ='Viridis'
)-
plot.contour
這個函式用來畫輪廓圖。
輸入:
- X(tensor):形狀
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()
)-
plot.quiver
這個函式用來畫二維向量場圖。
輸入:
- X(tensor): 形狀
N*M
- Y(tensor):形狀
N*M
- gridX(tensor, optional):形狀
N*M
- gradY(tensor, optional): 形狀
N*M
X
與Y
決定了 箭頭的長度和方向。可選的gridX
和gridY
指定了偏移。 -
支援下列特定選項:
options.normalize
: 最長肩頭的長度 (number
)options.arrowheads
: 是否現實箭頭 (boolean
; default =true
)-
plot.image
這個函式用來畫 圖片。 輸入:
- img(tensor): shape(
C*H*W
)。 -
支援下面特定選項:
options.jpgquality
: JPG quality (number
0-100; default = 100)-
plot.video
這個函式 播放一個
video
。 輸入:video
的檔名,或者是一個 shape 為L*H*W*C
的tensor
。這個函式不支援其它特定的功能選項。注意:使用
tensor
作為輸入的時候,需要安裝ffmpeg
。 能不能播放video
取決你使用的瀏覽器:瀏覽器必須要支援Theano codec in an OGG container
。(chrome可以用)。plot.svg
此函式繪製一個
SVG
物件。輸入是一個SVG
字串或 一個SVG
檔案的名稱。該功能不支援任何特定的功能options
。plot.text
此函式可在文字框中列印文字。輸入輸入一個
text
字串。目前不支援特定的options
plot.mesh
此函式畫出一個網格圖。
輸入:
-
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)-
Customizing plots
繪圖函式使用可選的
options
表作為輸入。用它來修改預設的繪圖屬性。所有輸入引數在單個表中指定;輸入引數是基於輸入表中鍵的匹配。下列的選項除了對於
plot.img
和plot.txt
不可用以外,其他的繪圖函式都適用。我們稱他為 通用選項。 options.title
: figure titleoptions.width
: figure widthoptions.height
: figure heightoptions.showlegend
: show legend (true
orfalse
)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介紹的時候已經提到過。
總結
明確幾個名詞:
- env:看作一個大容器
- pane: 就是用於繪圖的小視窗,在程式碼中叫
window
-
使用
Visdom
就是在env
中的pane
上畫圖。 options.xmin
: clip minimum value (number
; default =X:min()
)options.xmax
: clip maximum value (number
; default =X:max()
)