一. 安裝包
pytorch版本最好大於1.1.0。查看PyTorch版本的命令為torch.__version__
tensorboard若沒有的話,可用命令conda install tensorboard安裝,也可以用命令pip install tensorboard安裝。
注意:
- tensorboard可以直接實現可視化,不需要安裝TensorFlow;
- tensorboard和tensorboard_logger是不同的包,包含的函數也不相同,雖然總體上用法相似。
二. tensorboard的使用邏輯
【下圖摘自知乎文章:PyTorch下的Tensorboard 使用】
三. 本地使用示例
假設我想可視化模型訓練過程中的loss,那么就可以在訓練的時候,把每個epoch的loss都保存到文件中。
from torch.utils.tensorboard import SummaryWriter # SummaryWriter的作用是將數據以特定的格式存儲到文件夾 folder = '/Users/wangpeng/Desktop/tb' # 指定存儲文件夾 writer = SummaryWriter(log_dir=folder, flush_secs=30) # 實例化SummaryWriter類,每30秒寫入一次到硬盤 for epoch in range(100): loss = 10 - 0.1 * epoch writer.add_scalar('learning_rate', loss, epoch) # 把loss寫入到文件夾中
運行程序之后,tb文件夾內就會出現一個文件:
然后打開命令行終端, 輸入tensorboard --logdir='/Users/wangpeng/Desktop/tb',如下圖綠線所示:
把圖中紅線的地址復制到google瀏覽器中,即可看到loss的可視化結果:
四. tensorboard在服務器上使用
【下面的內容來自這篇博文:Tensorboard 在服務器上的使用】
4.1. windows系統
在Windows系統裝一個Xshell,在文件->屬性->ssh->隧道->添加,類型local,源主機填127.0.0.1(意思是本機),端口設置一個,比如12345,目標主機為服務器,目標端口一般是6006,如果6006被占了可以改為其他端口。
在服務器上運行 tensorboard --logdir='logs' --port =6006
在本機打開網頁127.0.0.1:12345
即可查看遠程的tensorboard。
注:關於通過Xshell來建立隧道的方法,如果嘗試沒有成功,可以參考這篇博客:Xshell遠程服務器后Tensorboard的本地可視化方法,講得更清楚一些。
4.2. Mac或Linux系統
· 在登錄遠程服務器的時候使用命令:ssh -L 16006:127.0.0.1:6006 account@server.address
(代替一般ssh遠程登錄命令:ssh account@server.address)
·訓練完模型之后使用如下命令:
tensorboard --logdir="/path/to/log-directory"
(其中,/path/to/log-directory為自己設定的日志存放路徑,因人而異)
·最后,在本地訪問地址:http://127.0.0.1:16006/
原理: 建立ssh隧道,實現遠程端口到本地端口的轉發 具體來說就是將遠程服務器的6006端口(tensorboard默認將數據放在6006端口)轉發到本地的16006端口,在本地對16006端口的訪問即是對遠程6006端口的訪問,當然,轉發到本地某一端口不是限定的,可自由選擇。
五. 兩條曲線畫一個圖上
程序示例:
import torch import numpy as np from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter(log_dir='/root/wp/action/result_recg/test', flush_secs=30) for j in range(1, 50): i = torch.tensor(j) learning_rate = 0.1 * i x = np.log2(i) y = 2 * np.log2(i) h = 3 * np.log2(i) w = 4 * np.log2(i) writer.add_scalar('learning_rate', i, j) # 把兩個圖放到一個section writer.add_scalar('loss/x', x, j) writer.add_scalar('loss/y', y, j) # 把兩條曲線放到一個圖上 writer.add_scalars('acc', {'h': h, 'w': w}, j) # 注意是add_scalars,不是add_scalar
運行結果,得到文件如下:
得到tensorboard圖像: