1. 程式人生 > >PyTorch學習筆記(13)——強力的視覺化工具visdom

PyTorch學習筆記(13)——強力的視覺化工具visdom

今天,讓我們來放鬆一下大腦,學習點輕鬆的東西————視覺化工具Visdom,它可以讓我們在使用PyTorch訓練模型的時候,視覺化中間的訓練情況,無論是loss變化還是中間結果比較。相比干呆呆的瞪著命令列,Visdom讓我們的調參之路變得更加生動和活潑了.~

0. 前言

對於一些任務,尤其是難以收斂以及情況複雜的,如果在訓練過程中,實時視覺化訓練情況,將會讓我們對訓練手段進行及時調整,更好的達到目標,避免不收斂、過擬合以及其它情況。這樣,我們就可以在訓練指標的判斷基礎上,加上感性的部分(視覺化結果),從而實現雙管齊下。

Visdom 是一個由FacebookResearch

開發的一個靈活的視覺化工具,可用來對實時(live)——如網路訓練中產生的結果,富資料(rich data)——如HTML,進行組織和共享。支援Torch和Numpy還有PyTorch。

Visdom 也可以實現遠端資料的視覺化,對科學實驗有很大幫助。我們可以遠端的傳送圖片和資料,並進行在ui介面顯示出來,檢查實驗結果,或者debug。

在這裡插入圖片描述

1. 總覽(overview)

按照官方的說法,開發Visdom的目的是使得資料(無論是在遠端還是本地)的視覺化,用以支援和促進科學試驗。

Visdom aims to facilitate visualization of (remote) data with an emphasis on supporting scientific experimentation.

在這裡插入圖片描述

2. 概念(concepts)

Visdom有一些簡單的特性,我們可以根據這個特性來構建屬於自己的特定的例程(use-cases)。

① Windows——視窗

在這裡插入圖片描述

當你剛剛開啟UI會發現,這是個白板,只有一片藍色,別的啥都沒有…。我們可以用圖形、影象和文字填充它。注意,無論是文字還是影象、視訊,都需要將這些內容放在一個叫做windows的container裡面,你可以對這些windows(視窗)拖拽,縮放以及刪除。

其中,windows存在於envs,envs的**status(狀態)可以跨sessions(會話)**儲存。

此外,windows還支援callbacks

(回撥函式),也就是說,當你在一個windows上輸入一些內容, 如果後端寫好了對應的處理邏輯,那麼callbacks會要求Visdom物件接收前端傳來的輸入給後端的處理程式碼,並將處理後的結果返回到前端顯示,也就是windows可以支援互動~

② Enviroments——環境

UI的左上角,有一條這樣的東西:這是視覺化空間所在的環境(envs)——可以理解為①中windows所在的context,預設情況下,每個使用者會擁有一個叫做main的env
在這裡插入圖片描述

如果有額外的需求,比如要在不同的環境中展示多種層次的內容,使用者可以在UI(前端)或者後端建立新的env。環境變數的狀態被長期儲存。

可以看到,我們可以在UI任意的切換不同的環境(env)。當你選擇了一個新的env,visdom將會向伺服器請求存在於該env中的影象。

在**env selector(環境選擇器)**後面,有一個小的橡皮擦eraser button,使用者可以使用它來清除當前env下的所有內容。如果你的展示是動態的,也就是資料來源源不斷需要展示,那麼後續的影象會 繼續展示在此env下。

③ State——狀態

當你在某些env下建立了一些視覺化影象內容後,伺服器會自動快取這些視覺化結果(設定checkpoint)。如果你重新載入此頁面或者重新開啟伺服器,這些影象內容會重現的。

當然,你也可以手動的儲存這些env的狀態:

  • save: 可以序列化env的狀態,並以json檔案保持在磁碟中。
  • fork: 當輸入一個新的名字,會複製當前的狀態到這個new env下。

在這裡插入圖片描述

④ Filter——過濾

這個功能挺容易理解的:就是根據你在filter視窗的輸入(右上角)對當前env下所有windows的title進行字串正則匹配,只顯示該env下跟輸入的影象名字匹配的影象:

在這裡插入圖片描述

3. 安裝(setup)& 啟動例子(demo)

我用的是PyTorch 0.4.1,在Python2.7/3.x都可以。Visdom直接可以安裝在這個環境下,我的是python3.x,直接pip install visdom即可。

安裝後,不需要程式碼寫好,就可以在命令列裡面跑visdom。
啟動方法: python -m visdom.server或者直接敲visdom,剛執行的時候,會開始下載一些指令碼,需要等待一會:
在這裡插入圖片描述

啟動起來後,寫一段測試程式碼如下,叫做demo.py,執行python demo.py

import visdom
import numpy as np
vis = visdom.Visdom()
vis.text('Hello, world!')
vis.image(np.ones((3, 10, 10)))

得到結果:
在這裡插入圖片描述

4. 繪圖例子

首先,要載入一些模組:
在這裡插入圖片描述

這裡,直接上程式碼,具體關於visdom的各個API的說明,請檢視visdom——A flexible tool for creating, organizing, and sharing visualizations of live, rich data. Supports Torch and Numpy.

4.1 image demo

在這裡插入圖片描述

其對應的結果分別為:
在這裡插入圖片描述

在這裡插入圖片描述

4.2 為windows註冊callbacks

在這裡插入圖片描述

可以看到,我們可以跟這個帶callbacks的windows進行互動:
在這裡插入圖片描述

當然,也可以載入音訊和視訊啦,還有WebGL等,這裡就不展開了。

5. 參考資料

[1] Visdom 視覺化工具 教程 (pytorch)
[2] Visdom 官方說明 (FacebookResearch)