一、前言
在深度學習模型訓練的過程中,常常需要實時監聽並可視化一些數據,如損失值loss,正確率acc等。在Tensorflow中,最常使用的工具非Tensorboard莫屬;在Pytorch中,也有類似的TensorboardX,但據說其在張量數據加載的效率方面不如visdom。visdom是FaceBook開發的一款可視化工具,其實質是一款在網頁端的web服務器,對Pytorch的支持較好。
二、安裝和啟動
visdom的安裝比較簡單,可以直接使用pip命令。
# visdom 安裝指令 pip install visdom
執行安裝命令后,可以執行以下命令啟動visdom。
# 啟動 visdom web服務器 python -m visdom.server
若安裝成功,則會返回一個網頁地址;若報錯,則安裝失敗,可以自行去github上下載源碼安裝。
將網址復制后在瀏覽器中打開,就可以看到visdom的主界面。
遠程連接本地可視化
1. 連接ssh時,將服務器的8097端口重定向到自己機器上來:
ssh -L 18097:127.0.0.1:8097 username@remote_server_ip(一定要在本地dos窗口輸入,不要在xshell里面輸入)
其中:18097:127.0.0.1代表自己機器上的18097號端口,8097是服務器上visdom使用的端口。
2. 在服務器上使用8097端口正常啟動tensorboard:
python -m visdom.server
3. 在本地瀏覽器中輸入地址:
127.0.0.1:18097
作者:kyle0x54
鏈接:https://www.jianshu.com/p/41d4ca00f4f3
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
三、簡單使用
這里以監聽損失值loss數據,准確率acc數據及可視化圖像等方面簡要介紹visdom的使用。
3.1 監聽單一數據loss
在模型訓練過程中,loss是最常監聽的數據,這里就以loss的監聽為例,使用visdom可視化loss的變化過程。為了使代碼更加簡潔,這里以for循環代替模型逐輪訓練的過程,loss值則在每個循環內部隨機產生。
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)
3.2 同時監聽loss和acc
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)
3.3 可視化圖像
在處理圖像任務時,還可以用visdom對圖像進行可視化。
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個可視化程序后,主面板如下所示: