PyTorch可視化——tensorboard、visdom

1、pytorch與tensorboard結合使用

Tensorboard 

Tensorboard通常都是做爲tf的可視化工具,與tf深度集成,它可以展示tf的網絡計算圖,繪製圖像生成的定量指標圖以及附加數據等。此外,Tensorboard也是一個獨立工具,只要保存的數據遵循必定的格式,Tensorboard就能夠讀取這些數據並進行可視化
  • 將網絡結構、動態數值以 protocol buffer 格式寫到文件裏。
  • 讀取網絡結構、讀取動態數值,並展現在瀏覽器中。

Tensorboard_logger 

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

安裝 

1.安裝tensorflow:
  建議安裝cpu-onlu版本(由於本人pytorch安裝的是GPU版本,避免在同一個虛擬環境下包衝突),能夠選擇直接pip安裝
 
2.安裝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,注意換成你綁定的端口,能夠看到結果。
 

2、visdom

 

基本概念

Visdom有一些簡單的特性,咱們能夠根據這個特性來構建屬於本身的特定的例程(use-cases)。
 

①Panes(窗格)

 
當你剛剛打開UI會發現,這是個白板,只有一片藍色,別的啥都沒有…。咱們能夠用圖形、圖像和文本填充它。
注意,
  不管是文本仍是圖像、視頻,都須要放在一個叫作pane的container裏面,你能夠對這些pane(窗口)拖拽,縮放以及刪除。
 
其中,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)))

 

上述代碼運行後,打開瀏覽器,輸入:html

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)'})

 

 
 

可視化接口

 
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 的輸入包含,一個tensor X(保存數據)和一個可選的tensor Y(保存標籤或者時間戳)。
全部的繪圖函數都接收一個可選參數win,用來將圖畫到一個特定的pane上。每一個繪圖函數也會返回當前繪圖的win。您也能夠指定 匯出的圖添加到哪一個env上。
 
三個經常使用到的函數以下:
 
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
 
 
image:
這個函數用來畫 圖片。能夠是輸入的圖片、GAN生成的圖片、卷積核的信息
輸入:
img(tensor): shape(C*H*W)。
支持下面特定選項:
options.jpgquality: JPG quality (number 0-100; default = 100)
 
import torch as t import visdom as vis v=vis.Visdom() #可視化一張隨機的黑白圖片 v.image(t.randn(64,64),win='random1’) #可視化一張隨機的彩色圖片 v.image(t.randn(3,64,64),win='random2’) #可視化36張隨機彩色圖片,每一張6行 v.images( t.randn(36,3,64,64).numpy(), nrow=6, win='rnadom3', opts={'title':'random_img'})
 
 

text:

   此函數可在文本框中打印文本。輸入輸入一個text字符串。目前不支持特定的options. python

   該函數支持全部的html標籤,也遵循語法標準,換行要使用<br>json

 

 

剩下的之後再補充。。。windows

原文出處:https://www.cnblogs.com/yh-blog/p/12345170.html後端

相關文章
相關標籤/搜索