1. 程式人生 > >Pytorch求索(2): Pytorch使用visdom進行視覺化

Pytorch求索(2): Pytorch使用visdom進行視覺化

Pytorch使用visdom進行視覺化

文章目錄

visdom介紹

visdom是Facebook專門為Pytorch開發的一款視覺化工具,開源於2017年3月,專案地址為visdom,其十分輕量級,但功能豐富,提供了大多數的科學運算視覺化API,基本視覺化介面如下圖所示:

visdom-1

visdom支援多種資料格式的視覺化,包括數值、影象、文字以及視訊等,支援Pytorch、Torch和Numpy。使用者可以通過程式設計的方式組織視覺化空間或者通過使用者介面為資料打造儀表板,檢查實驗結果和除錯程式碼。

visdom核心概念

  • env:環境

    可以使用envs對視覺化空間進行分割槽。預設地,每個使用者都會有一個叫做mainenvs。可以通過程式設計或UI建立新的envsenvs的狀態是長期儲存的。不同環境的視覺化結果相互隔離,互不影響。在使用時如果不指定env,預設使用main。不同使用者、不同程式,最好使用不同的env,避免相互影響。

  • pane:窗格

    窗格用於視覺化影象、數值或文字等,它可以自由拖動、縮放、儲存和關閉。類似於一個一個的小的視窗。一個程式可以使用同一個env中的不同pane,每個pane視覺化記錄某一資訊。

visdom安裝與使用

visdom安裝十分簡單,可以直接pip進行安裝

pip install visdom

安裝好以後,需要啟動visdom服務

python -m visdom.server
或者(後臺執行)
nohup python -m visdom.server &

visdom服務是一個Web Server服務,預設繫結8097埠。

基本使用,程式設計程式碼如下:

import visdom
import torch
# 新建一個連線客戶端
# 指定env = 'test1'
vis = visdom.Visdom(env='test1')
x = torch.arange(1, 100, 0.01)
y = torch.sin(x)
vis.line(X=x,Y=y, win='sinx',opts={'title':'y=sin(x)'})

開啟瀏覽器,輸入localhost:8097,如下圖所示:

visdom-1

選擇我們新建的env環境:

visdom-2

可以看到我們繪製的影象:

visdom-3

對於每一個影象,其佔用一個panel,都可以自由移動、縮放等

注意:

這些不會自動儲存,需要手動儲存save,不然會清空

常用API

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 : 序列化狀態

plot.scatter

這個函式是用來畫2D3D資料的散點圖。它需要輸入 N*2N*3的 tensor X來指定N個點的位置。一個可供選擇的長度為Nvector用來儲存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 是一個包含整數值的TensorTensor的形狀可以是 NN x 3KK 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 and K 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 XX指定了熱力圖中位置的值。

支援下列特定選項:

  • 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):形狀 NN×M,指定每個條的高度。如果XM列,那麼每行的值可以看作一組或者把他們值堆起來(取決與options.stacked是否為True)。
  • Y(tensor, optional):形狀 N,指定對應的x軸的值。

支援以下特定選項:

  • options.columnnames: table containing x-axis labels
  • options.stacked : stack multiple columns in X
  • options.legend : table containing legend labels

plot.histogram

這個函式用來畫指定資料的直方圖。他需要輸入長度為 N 的 tensor XX儲存了構建直方圖的值。

支援下面特定選項:

  • options.numbins: bins的個數 (number; default = 30)

plot.boxplot

這個函式用來畫箱型圖:

輸入:

  • X(tensor): 形狀 NN×M,指定做第m個箱型圖的N個值。

支援以下特定選項:

  • options.legend: labels for each of the columns in X

plot.surf

shiyong
這個函式用來畫表面圖:
輸入:

  • 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
    XY決定了 箭頭的長度和方向。可選的gridXgridY指定了偏移。

支援下列特定選項:

  • 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*Ctensor。這個函式不支援其它特定的功能選項。

注意:使用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*2N*3) 定義N個頂點
  • Y(tensor, optional):shape(M*2M×3) 定義多邊形

支援下列特定選項:

  • options.color: color (string)
  • options.opacity: 多邊形的不透明性 (number between 0 and 1)

Customizing plots

繪圖函式使用可選的options表作為輸入。用它來修改預設的繪圖屬性。所有輸入引數在單個表中指定;輸入引數是基於輸入表中鍵的匹配。

下列的選項除了對於plot.imgplot.txt不可用以外,其他的繪圖函式都適用。我們稱他為 通用選項。

  • options.title : figure title
  • options.width : figure width
  • options.height : figure height
  • options.showlegend : show legend (true or false)
  • options.xtype : type of x-axis ('linear' or 'log')
  • options.xlabel : label of x-axis
  • options.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-axis
  • options.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 updateTrace已經廢棄了,可以直接在line等API加上update="append"即可

visdom底層

visdom服務是一個Web Server服務,客戶端與伺服器端通過tornado進行非阻塞互動,視覺化操作不會阻塞當前程式,網路異常也不會導致程式退出

參考

[1] 深度學習框架Pytorch:入門與實踐(陳雲著)
[2] 官方介紹:https://github.com/facebookresearch/visdom
[3] 部落格:pytorch學習筆記(八):PytTorch視覺化工具 visdom