PyTorch 下使用 Tensorboard


本文主要介紹PyTorch框架下的可視化工具Tensorboard的使用

面向第一次接觸可視化工具的新手<其實是備忘>

之前用了幾天visdom,用起來很方便,但是畫的圖顯得很亂,所以花了一晚上把代碼里的visdom都改成了tensorboard。

Tensorboard

安裝

原本是tensorflow的可視化工具,pytorch從1.2.0開始支持tensorboard。之前的版本也可以使用tensorboardX代替。

在使用1.2.0版本以上的PyTorch的情況下,一般來說,直接使用pip安裝即可。

pip install tensorboard

這樣直接安裝之后,有可能打開的tensorboard網頁是全白的,如果有這種問題,解決方法是卸載之后安裝更低版本的tensorboard。

pip uninstall tensorboard
pip install tensorboard==2.0.2

Tensorboard的使用邏輯

Tensorboard的工作流程簡單來說是

  • 將代碼運行過程中的,某些你關心的數據保存在一個文件夾中:
這一步由代碼中的writer完成
  • 再讀取這個文件夾中的數據,用瀏覽器顯示出來:
這一步通過在命令行運行tensorboard完成。

代碼體中要做的事

首先導入tensorboard

from torch.utils.tensorboard import SummaryWriter   

這里的SummaryWriter的作用就是,將數據以特定的格式存儲到剛剛提到的那個文件夾中。

首先我們將其實例化

writer = SummaryWriter('./path/to/log')

這里傳入的參數就是指向文件夾的路徑,之后我們使用這個writer對象“拿出來”的任何數據都保存在這個路徑之下。

這個對象包含多個方法,比如針對數值,我們可以調用

writer.add_scalar(tag, scalar_value, global_step=None, walltime=None)

這里的tag指定可視化時這個變量的名字,scalar_value是你要存的值,global_step可以理解為x軸坐標。

舉一個簡單的例子:

for epoch in range(100)
    mAP = eval(model)
    writer.add_scalar('mAP', mAP, epoch)

這樣就會生成一個x軸跨度為100的折線圖,y軸坐標代表着每一個epoch的mAP。這個折線圖會保存在指定的路徑下(但是現在還看不到)

同理,除了數值,我們可能還會想看到模型訓練過程中的圖像。

 writer.add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
 writer.add_images(tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW')

可視化

我們已經將關心的數據拿出來了,接下來我們只需要在命令行運行:

tensorboard --logdir=./path/to/the/folder --port 8123

然后打開瀏覽器,訪問地址即可。這里的8123只是隨便一個例子,用其他的未被占用端口也沒有任何問題,注意命令行的端口與瀏覽器訪問的地址同步。

如果發現不顯示數據,注意檢查一下路徑是否正確,命令行這里注意是

--logdir=./path/to/the/folder 

而不是

--logdir= './path/to/the/folder '

另一點要注意的是tensorboard並不是實時顯示(visdom是完全實時的),而是默認30秒刷新一次。

 

細節

1.變量歸類

命名變量的時候可以使用形如

writer.add_scalar('loss/loss1', loss1, epoch)
writer.add_scalar('loss/loss2', loss2, epoch)
writer.add_scalar('loss/loss3', loss3, epoch)

的格式,這樣3個loss就會被顯示在同一個section。

2.同時顯示多個折線圖

假如使用了兩種學習率去訓練同一個網絡,想要比較它們訓練過程中的loss曲線,只需要將兩個日志文件夾放到同一目錄下,並在命令行運行

tensorboard --logdir=./path/to/the/root --port 8123

 

原文鏈接:https://zhuanlan.zhihu.com/p/103630393

 


1 引言

      我們都知道tensorflow框架可以使用tensorboard這一高級的可視化的工具,為了使用tensorboard這一套完美的可視化工具,未免可以將其應用到Pytorch中,用於Pytorch的可視化。這里特別感謝Github上的解決方案: https://github.com/lanpa/tensorboardX

      本文主要是針對該解決方案提供一些介紹。

     TensorboardX支持scalar, image, figure, histogram, audio, text, graph, onnx_graph, embedding, pr_curve and videosummaries等不同的可視化展示方式,具體介紹移步至項目Github 觀看詳情。


2 環境安裝

本教程代碼環境依賴:

python 3.6+

Pytorch 0.4.0+

tensorboardX:   pip install tensorboardX、pip install tensorflow


3 代碼教程

       TensorboardX可以提供中很多的可視化方式,本文主要介紹scalar 和 graph,其他類型相似。

3.1 scalar教程

 
01_scalar_base.py 代碼

        對上述代碼進行解釋,首先導入:from tensorboardXimport SummaryWriter,然后定義一個SummaryWriter() 實例。在SummaryWriter()上鼠標ctrl+b我們可以看到SummaryWriter()的參數為:def __init__(self, log_dir=None, comment='', **kwargs): 其中log_dir為生成的文件所放的目錄,comment為文件名稱。默認目錄為生成runs文件夾目錄。我們運行上述代碼:生成結果為:

 
 

      當我們為SummaryWriter(comment='base_scalar')。生成結果為:

 
 

      當我們為SummaryWriter(log_dir='scalar') 添加log_dir參數,可以看到第二條數據的文件名稱包括了base_scalar值。生成結果目錄為:

 
 

       接着解釋writer.add_scalar('scalar/test', np.random.rand(), epoch),這句代碼的作用就是,將我們所需要的數據保存在文件里面供可視化使用。 這里是Scalar類型,所以使用writer.add_scalar(),其他的隊形使用對應的函數。第一個參數可以簡單理解為保存圖的名稱,第二個參數是可以理解為Y軸數據,第三個參數可以理解為X軸數據。當Y軸數據不止一個時,可以使用writer.add_scalars().運行代碼之后生成文件之后,我們在runs同級目錄下使用命令行:tensorboard --logdir runs. 當SummaryWriter(log_dir='scalar')的log_dir的參數值 存在時,將tensorboard --logdir runs 改為 tensorboard --logdir 參數值

 
 

       最后調用writer.close()。

      點擊鏈接即可看到我們的最終需要的可視化結果。

 
可視化效果

       可以分別點擊對應的圖片查看詳情。可以看到生成的Scalar名稱為'scalar/test'與'scalar/test'一致。注:可以使用左下角的文件選擇你想顯示的某個或者全部圖片。

3.2 Graph教程

 
02_graph_model.py 代碼

       首先我們定義一個神經網絡取名為Net1。然后將其添加到tensorboard可是可視化中。

with SummaryWriter(comment='Net1')as w:

         w.add_graph(model, (dummy_input,))

      我們重點關注最后兩句話,其中使用了python的上下文管理,with 語句,可以避免因w.close未寫造成的問題。推薦使用此方式。

       因為這是一個神經網絡架構,所以使用 w.add_graph(model, (dummy_input,)),其中第一個參數為需要保存的模型,第二個參數為輸入值,元祖類型。打開tensorvboard控制台,可得到如下結果。

 
 

        點擊Net1部分可以將其網絡展開,查看網絡內部構造。

 
模型可視化結果

        其他部分可以繼續一次展開查看詳情。

3.3 網絡訓練綜合教程

        解釋完上述兩部分知識之后,我們可以綜合運用上述兩部分內容,實現線性擬合的訓練過程中的loss可視化和模型的保存。

 

 
 

 

 
03_linear_regression.py 代碼 

        我們將運行過程中loss和model分別保存,最后打開tensorboard控制台,可以得到模型結果和loss的結果為下圖.

 
模型可視化結果

        注:不同的graph的可視化可以使用上圖Run旁邊的下拉框選擇。

 
loss可視化結果

3.4 Tensorboard綜合Demo

        本Demo代碼為TensorboardX提供的官方Demo代碼。

 
 

 

 
demo.py

最終運行的所有可視化結果為:

 
最終可視化結果

4 結束語

        本文是我寫的第一篇比較完整的文章,大家如果覺得幫助到了你,幫忙點個贊唄。

        本文所有的代碼鏈接為:https://github.com/miaoshuyu/pytorch-tensorboardx-visualization(對你有用的話,麻煩點個小星星唄)

        若轉載,請標明出處,謝謝!



作者:苗書宇
鏈接:https://www.jianshu.com/p/46eb3004beca
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

 


免責聲明!

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



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