1. 程式人生 > >PyTorch視覺化——tensorboard、visdom

PyTorch視覺化——tensorboard、visdom

一、pytorch與tensorboard結合使用

Tensorboard 

Tensorboard一般都是作為tf的視覺化工具,與tf深度整合,它能夠展現tf的網路計算圖,繪製圖像生成的定量指標圖以及附加資料等。此外,Tensorboard也是一個獨立工具,只要儲存的資料遵循一定的格式,Tensorboard就可以讀取這些資料並進行視覺化
  • 將網路結構、動態數值以 protocol buffer 格式寫到檔案裡。
  • 讀取網路結構、讀取動態數值,並展示在瀏覽器中。

Tensorboard_logger 

Tensorboard_logger是TeamHGMemex開發的一款輕量級工具,它將Tensorboard的工具抽取出來,使得非tf使用者也可以使用它進行視覺化,不過功能有限,但一些常用的還是可以支援。  

安裝 

安裝tensorflow:建議安裝cpu-onlu版本(因為本人pytorch安裝的是GPU版本,避免在同一個虛擬環境下包衝突),可以選擇直接pip安裝 安裝tensorboard_logger:安裝十分簡單,可以通過 pip install tensorboard_logger 命令直接安裝  

如何使用 

1.首先啟動Tensorboard,命令格式如下:
tensorboard --logdir <your/running/dir> --port <your_bind_port>
  例如命令是:
tensorboard --logdir /home/tenyun/Documents/Githome/pytorch_home/ --port 1234
  這裡選擇埠的時候,一定要注意,不能選擇被佔用的埠   啟動成功後,控制檯如下輸出:
TensorBoard 1.11.0 at http://TenYun:1234(Press CTRL+C to quit)
    2.程式碼中使用
from tensorboard_logger import Logger
# 構建logger物件,logdir用來指定log檔案的儲存路徑
# flush_secs用來指定重新整理同步間隔
logger = Logger(logdir="/home/tenyun/Documents/Githome/pytorch_home", flush_secs=2)
# 模擬函式
for ii in range(100):
    logger.log_value('loss', 10-ii**0.5, step=ii)
    logger.log_value('accuracy', ii**0.5/10, step=ii)
 

 

3.檢視結果 執行以後,到瀏覽器輸入: http://localhost:1234,注意換成你繫結的埠,可以看到結果。  

二、visdom

https://blog.csdn.net/g11d111/article/details/84571118  

基本概念

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

①Panes(窗格)

當你剛剛開啟UI會發現,這是個白板,只有一片藍色,別的啥都沒有…。我們可以用圖形、影象和文字填充它。注意,無論是文字還是影象、視訊,都需要將這些內容放在一個叫做pane的container裡面,你可以對這些pzne(視窗)拖拽,縮放以及刪除。   其中,pane存在於envs,envs的 status(狀態)可以跨sessions(會話)儲存。   此外,pane還支援callbacks(回撥函式),也就是說,當你在一個pane上輸入一些內容, 如果後端寫好了對應的處理邏輯,那麼callbacks會要求Visdom物件接收前端傳來的輸入給後端的處理程式碼,並將處理後的結果返回到前端顯示,也就是pane可以支援互動~  

② Enviroments環境

UI的左上角,有一條這樣的東西:這是視覺化空間所在的環境(envs)——可以理解為①中pane所在的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下跟輸入的影象名字匹配的影象    

總結:

明確幾個名詞:
  • env:看作一個大容器,在程式碼中是 vis=visdom.Visdom(env=''main)
  • pane: 就是用於繪圖的小視窗,在程式碼中叫 window
使用Visdom就是在env中的pane上畫圖   區別引數env和win:
  • env是Visdom的引數,指定環境的名字,預設有個叫main的環境
  • win(和opts)是vis中幾乎所有函式都有的引數,指定pane的名字,建議每次操作都指定win
  補充:
  • opts用來視覺化設定,接收一個字典。通用的一些配置:主要用於設定pane的顯示格式
options.title options.xlabel options.ylabel options.width  
  • 避免覆蓋之前的數值:
    1.指定引數 update=‘append’     2.使用vis.updateTrace方法更新圖  

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

我的是python3.x,直接pip install visdom即可。   安裝後,不需要程式碼寫好,就可以在命令列裡面跑visdom。   啟動方法:  python -m visdom.server 或者直接敲 visdom,剛執行的時候,會開始下載一些指令碼,需要等待一會   然後試一段程式碼:
import visdom
import numpy as np

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

 

上述程式碼執行後,開啟瀏覽器,輸入:

http://localhost:8097

 

看看結果怎麼樣

    再試一下其他程式碼:
import torch as t
import visdom as vis
v=vis.Visdom(env='linetest')
x=t.arange(1,30,0.01)
y=t.sin(x)
v.line(X=x,Y=y,win='sinx',opts={'title':'y.sin(x)'})

 

   

視覺化介面

https://blog.csdn.net/u012436149/article/details/69389610?utm_source=distribute.pc_relevant.none-task Visdom支援下列API。由Plotly提供視覺化支援。
  • vis.scatter : 2D 或 3D 散點圖
  • vis.line : 線圖