1. 程式人生 > >PytTorch視覺化工具 visdom

PytTorch視覺化工具 visdom

一個靈活的視覺化工具,可用來對於 實時,富資料的 建立,組織和共享。支援TorchNumpy

  • 總覽
  • 基本概念
  • Setup
  • 啟動
  • 視覺化介面
  • 總結

    總覽

    Visdom目的是促進遠端資料的視覺化,重點是支援科學實驗。。

    向您和您的合作者傳送視覺化 影象,圖片和文字。

    通過程式設計組織您的視覺化空間,或者通過UI為實時資料建立dashboards,檢查實驗的結果,或者debug實驗程式碼。

  • 基本概念

    Visdom有一組簡單的特性,可以用它們組合成不同的用例。

    Panes(窗格)

    UI剛開始是個白板–您可以用影象,圖片,文字填充它。這些填充的資料出現在 Panes

     中,您可以這些Panes進行 拖放,刪除,調整大小和銷燬操作。Panes是儲存在 envs 中的, envs的狀態 儲存在會話之間。您可以下載Panes中的內容–包括您在svg中的繪圖。

    Tip: 您可以使用瀏覽器的放大縮小功能來調整UI的大小。

    Environments(環境)

    您可以使用envs對視覺化空間進行分割槽。預設地,每個使用者都會有一個叫做mainenvs。可以通過程式設計或UI建立新的envsenvs的狀態是長期儲存的。

    您可以通過 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來訪問 Visdomlocalhost可以換成您的託管地址。

    If the above does not work, try using an SSH tunnel to your server by adding the following line to your local ~/.ssh/configLocalForward 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 的輸入包含,一個tensor X(儲存資料)和一個可選的tensor Y(儲存標籤或者時間戳)。所有的繪圖函式都接收一個可選引數win,用來將圖畫到一個特定的window上。每個繪圖函式也會返回當前繪圖的win。您也可以指定 匯出的圖新增到哪個env上。  (這裡的window的意思就是之前說的Pane)。

    visdom_big

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

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

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

    支援下面特定選項:

  • options.numbinsbins的個數 (number; default = 30)
  • plot.boxplot

  • 這個函式用來畫箱型圖:

    輸入:

  • X(tensor): 形狀 NN×M,指定做第m個箱型圖的N個值。
  • 支援以下特定選項:

  • options.legend: labels for each of the columns in X
  • 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決定了 箭頭的長度和方向。可選的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*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*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介紹的時候已經提到過。

    總結

    明確幾個名詞:

  • env:看作一個大容器
  • pane: 就是用於繪圖的小視窗,在程式碼中叫 window
  • 使用Visdom就是在env中的pane上畫圖。

  • options.xmin : clip minimum value (number; default = X:min())
  • options.xmax : clip maximum value (number; default = X:max())