pytorch學習筆記 八 PytTorch視覺化工具 visdom
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
Visdom PyTorch視覺化工具
本文翻譯的時候把 略去了 Torch
部分。
一個靈活的視覺化工具,可用來對於 實時,富資料的 建立,組織和共享。支援Torch
Numpy
。
總覽
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
- 1
- 2
- 3
啟動
啟動伺服器(可能在screen
或者tmux
中):
python -m visdom.server
- 1
- 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 visdomimport numpy as npvis = visdom.Visdom()vis.text('Hello, world!')vis.image(np.ones((3, 10, 10)))
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
Demos
python example/demo.py
- 1
- 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
的輸入包含,一個tensor X
(儲存資料)和一個可選的tensor Y
(儲存標籤或者時間戳)。所有的繪圖函式都接收一個可選引數win
,用來將圖畫到一個特定的window
上。每個繪圖函式也會返回當前繪圖的win
。您也可以指定 匯出的圖新增到哪個env
上。
(這裡的window的意思就是之前說的Pane)。
plot.scatter
這個函式是用來畫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
.
- 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
的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
plot.stem
這個函式用來畫莖葉圖。它需要一個 形狀為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
plot.heatmap
這個函式用來畫熱力圖。它輸入一個 形狀為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
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
的 tensor X
。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'
)options.xmin
: clip minimum value (number
; default =X:min()
)options.xmax
: clip maximum value (number
; default =X:max()
)
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
上畫圖。