pytorch tensorboard在本地和遠程服務器使用,兩條loss曲線畫一個圖上


一. 安裝包

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圖像:

 

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM