close

第六章 PyTorch 視覺化模組

第六章簡介

本章介紹視覺化工具,包括TensorBoard視覺化工具,混淆矩陣,CNN卷積核與特徵圖視覺化,分類模型注意力演算法——Grad CAM,模型參數量視覺化。

首先對強大的視覺化工具TensorBoard進行講解,介紹其提供的十多個資料視覺化API

然後借助Tensorboard的繪圖功能,觀察CNN卷積核與特徵圖的變化過程,同時對分類混淆矩陣進行分析。

接著介紹一個實用的分類模型注意力機制視覺化演算法——Grad CAM

最後介紹一系列對模型參數量分析的工具。

 

6.1 Tensorboard 基礎與使用

TensorboardTensorFlow中提供的視覺化工具,它能視覺化資料曲線、模型拓撲圖、圖像、統計分佈曲線等。

PyTorch中,早期是不支持Tensorboard,採用了TensorboardX作為替身,現在PyTorch已經支持Tensorboard的使用,本節就介紹Tensorboard工具的概念、原理以及使用方法。

tensorboard 安裝

首先運行以下代碼,觀察報錯,通過報錯資訊指引我們安裝tensorboard

    import os

 

    BASE_DIR = os.path.dirname(os.path.abspath(__file__))

    from torch.utils.tensorboard import SummaryWriter

 

    log_dir = BASE_DIR  # test_tensorboard.py檔所在目錄

    writer = SummaryWriter(log_dir=log_dir, filename_suffix="_test_tensorboard")

    # writer = SummaryWriter(comment="test01", filename_suffix="_test_tensorboard")

    x = range(100)

    for i in x:

        writer.add_scalar('y=2x', i * 2, i)

        writer.add_scalar('y=pow(2, x)', 2 ** i, i)

    writer.close()

Copy

直接運行代碼,提示:

import tensorboard ModuleNotFoundError: No module named 'tensorboard'

只需要在命令窗口中執行:

pip install tensorboard

重新運行代碼,獲得event file檔,《events.out.tfevents.1654508983.dream.5756.0

tensorboard 初體驗

通過以上步驟得到了一個event file 檔,下面需要啟動tensorboard軟體event file檔進行視覺化。

tensorboard基本原理是這樣的

  1. python代碼中將視覺化的資料記錄到event file中,保存至硬碟
  2. 採用tensorboardevent file檔進行讀取,並在web端進行視覺化

啟動步驟如下:

tensorboard --logdir=your path dir

Copy

terminal中執行以下命令即可,注意必須是資料夾,不能是檔案名,tensorboard會將資料夾下所有event file都視覺化

得到TensorBoard 2.0.0 at http://localhost:6006/ (Press CTRL+C to quit)之類的提示

然後複製網址http://localhost:6006/ 到流覽器中進行打開,就得到如下介面

<<AI人工智慧 PyTorch自學>> 6.1 Tenso

 

tensorboard啟動的過程中,可能發生的問題:

1. 6006埠被佔用:

 port 6006 was already in use

 

E0117 15:58:38.631224 MainThread program.py:260] TensorBoard attempted to bind to port 6006, but it was already in use

 

TensorBoard attempted to bind to port 6006, but it was already in use

Copy

解決方法:修改埠為6007

tensorboard --logdir=your_dir --port=6007

Copy

到這裡可以知道,tensorboard軟體是一個web應用,它對指定目錄下的event file進行視覺化,視覺化頁面擁有一系列功能按鈕,供開發者使用。

通過demo代碼,我們繪製了兩條曲線,除了繪製曲線,tensorboard還又許多強大視覺化功能,下面就介紹如何進行其它資料類型的視覺化。

SummaryWriter類介紹

tensorboard環境配置好了,下面要重點學習在python代碼中如何把各類資料合理的寫入event file,然後用tensorboard軟體進行視覺化。

pytorch代碼中,提供了SummaryWriter類來實現資料的寫入,請閱讀官方文檔對SummaryWriter的描述:

The SummaryWriter class provides a high-level API to create an event file in a given directory and add summaries and events to it. The class updates the file contents asynchronously. This allows a training program to call methods to add data to the file directly from the training loop, without slowing down training.

Copy

首先來學習SummaryWriter的參數設置,然後學習它提供的一些列寫入方法,如add_scalarsadd_histogramadd_image等等。

CLASS torch.utils.tensorboard.writer.SummaryWriter(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix='')

屬性:

log_dir (string) – 檔保存目錄設置,預設為 runs/current_datetime_hostname

comment (string) – log_dir採用預設值時,comment字串作為子目錄

purge_step (int) –

max_queue (int) –

flush_secs (int) – 磁片刷新時間,預設值為120

filename_suffix (string) –檔案名尾碼

方法:

add_scalar

add_scalar(tag, scalar_value, global_step=None, walltime=None, new_style=False, double_precision=False)

功能:添加標量;tag的設置可以有個技巧是在同一欄下繪製多個圖,如'Loss/train' 'Loss/Valid' 這就類似於matplotlibsubplot(121), subplot(122)

  • tag (string) – Data identifier
  • scalar_value (float or string/blobname) – Value to save
  • global_step (int) – Global step value to record

代碼實現:

<<AI人工智慧 PyTorch自學>> 6.1 Tenso

 

add_scalars

add_scalars(main_tagtag_scalar_dictglobal_step=Nonewalltime=None)

功能:在一個坐標軸中繪製多條曲線。常用於曲線對比。

  • main_tag (string) – The parent name for the tags
  • tag_scalar_dict (dict) – Key-value pair storing the tag and corresponding values
  • global_step (int) – Global step value to record

核心在於tag_scalar_dict 字典中存放多條曲線的數值。

代碼實現:

<<AI人工智慧 PyTorch自學>> 6.1 Tenso

add_histogram

add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)

功能:繪製長條圖。這裡的global_step表明會得到多個長條圖,詳情請看圖理解。

tensorboard介面,需要進入HISTOGRAM中才能看到長條圖視覺化。

  • tag (string) – Data identifier
  • values (torch.Tensor, numpy.array, or string/blobname) – Values to build histogram
  • global_step (int) – Global step value to record
  • bins (string) – One of {‘tensorflow’,’auto’, ‘fd’, …}. This determines how the bins are made.

代碼實現:

<<AI人工智慧 PyTorch自學>> 6.1 Tenso

add_image

add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')

功能:繪製圖像。

  • tag (string) – Data identifier
  • img_tensor (torch.Tensor, numpy.array, or string/blobname) – Image data
  • global_step (int) – Global step value to record dataformats- 資料通道順序物理意義。默認為 CHW

代碼實現:

<<AI人工智慧 PyTorch自學>> 6.1 Tenso

add_images

add_images(tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW')

功能:繪製圖像序列,常用於資料清洗,卷積核,特徵圖的視覺化。

Add batched image data to summary.Note that this requires the pillow package.

  • tag (string) – Data identifier
  • img_tensor (torch.Tensor, numpy.array, or string/blobname) – Image data
  • global_step (int) – Global step value to record
  • walltime (float) – Optional override default walltime (time.time()) seconds after epoch of event
  • dataformats (string) – Image data format specification of the form NCHW, NHWC, CHW, HWC, HW, WH, etc.

代碼實現:

<<AI人工智慧 PyTorch自學>> 6.1 Tenso

add_figure

add_figure(tag, figure, global_step=None, close=True, walltime=None)

功能:將matplotlibfigure繪製到tensorboard中。

Render matplotlib figure into an image and add it to summary.Note that this requires the matplotlib package.

tag (string) – Data identifier

figure (matplotlib.pyplot.figure) – Figure or a list of figures

global_step (int) – Global step value to record

close (bool) – Flag to automatically close the figure

walltime (float) – Optional override default walltime (time.time()) seconds after epoch of event

剩下一些高級函數,就不一一講解,用法雷同,再次僅匯總,供需使用。

add_video:繪製視頻

add_audio:繪製音訊,可進行音訊播放。

add_text:繪製文本

add_graph:繪製pytorch模型拓撲結構圖。

add_embedding:繪製高維資料在低維的投影

add_pr_curve:繪製PR曲線,二分類任務中很實用。

add_mesh:繪製網格、3D點雲圖。

add_hparams:記錄超參數組,可用於記錄本次曲線所對應的超參數。

小結

pytorch中使用tensorboard非常簡單,只需要將想要視覺化的資料採用SummaryWriter類進行記錄,存在硬碟中永久保存,然後借助tensorboard軟體對event file進行視覺化。

tensorboard是非常強大的視覺化工具,可以很好説明開發者分析模型開發過程中的各個狀態,如監控loss曲線觀察模型訓練情況,繪製梯度分佈長條圖觀察是否有梯度消失,繪製網路拓撲圖觀察網路結構等,請大家多留意SummaryWriter官方文檔的介紹,瞭解最新SummaryWriter有什麼方法可用。

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 HCHUNGW 的頭像
    HCHUNGW

    HCHUNGW的部落格

    HCHUNGW 發表在 痞客邦 留言(0) 人氣()