一、前言
在深度學習模型訓練的過程中,常常需要實時監聽並可視化一些數據,如損失值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個可視化程序后,主面板如下所示:


