在深度學習模型訓練的過程當中,經常須要實時監聽並可視化一些數據,如損失值loss,正確率acc等。在Tensorflow中,最常使用的工具非Tensorboard莫屬;在Pytorch中,也有相似的TensorboardX,但聽說其在張量數據加載的效率方面不如visdom。visdom是FaceBook開發的一款可視化工具,其實質是一款在網頁端的web服務器,對Pytorch的支持較好。python
visdom的安裝比較簡單,能夠直接使用pip命令。git
# visdom 安裝指令 pip install visdom
執行安裝命令後,能夠執行如下命令啓動visdom。github
# 啓動 visdom web服務器 python -m visdom.server
若安裝成功,則會返回一個網頁地址;若報錯,則安裝失敗,能夠自行去github上下載源碼安裝。web
將網址複製後在瀏覽器中打開,就能夠看到visdom的主界面。瀏覽器
這裏以監聽損失值loss數據,準確率acc數據及可視化圖像等方面簡要介紹visdom的使用。服務器
在模型訓練過程當中,loss是最常監聽的數據,這裏就以loss的監聽爲例,使用visdom可視化loss的變化過程。爲了使代碼更加簡潔,這裏以for循環代替模型逐輪訓練的過程,loss值則在每一個循環內部隨機產生。app
from visdom import Visdom import numpy as np import time # 將窗口類實例化 viz = Visdom() # 建立窗口並初始化 viz.line([0.], [0], win='train_loss', opts=dict(title='train_loss')) for global_steps in range(10): # 隨機獲取loss值 loss = 0.2 * np.random.randn() + 1 # 更新窗口圖像 viz.line([loss], [global_steps], win='train_loss', update='append') time.sleep(0.5)
from visdom import Visdom import numpy as np import time # 將窗口類實例化 viz = Visdom() # 建立窗口並初始化 viz.line([[0.,0.]], [0], win='train', opts=dict(title='loss&acc', legend=['loss', 'acc'])) for global_steps in range(10): # 隨機獲取loss和acc loss = 0.1 * np.random.randn() + 1 acc = 0.1 * np.random.randn() + 0.5 # 更新窗口圖像 viz.line([[loss, acc]], [global_steps], win='train', update='append') # 延時0.5s time.sleep(0.5)
在處理圖像任務時,還能夠用visdom對圖像進行可視化。dom
from visdom import Visdom import numpy as np import cv2 import torch # 使用opencv讀取數據 img = cv2.imread('pkq.jpg') # opencv按照BGR讀取,而visdom默認按照RGB顯示,所以要進行通道轉換 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # visdom相似於pytorch中的卷積模型,接收的數據都要求通道數在前 img = np.transpose(img, (2, 0, 1)) img = torch.from_numpy(img) # 可視化圖像 viz.image(img, win='pkq')
visdom能夠同時在主面板中打開多個窗口,執行上面3個可視化程序後,主面板以下所示:工具