日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【小白学PyTorch】14.tensorboardX可视化教程

發布時間:2025/3/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小白学PyTorch】14.tensorboardX可视化教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

<<小白學PyTorch>>

小白學PyTorch | 13 EfficientNet詳解及PyTorch實現

小白學PyTorch | 12 SENet詳解及PyTorch實現

小白學PyTorch | 11 MobileNet詳解及PyTorch實現

小白學PyTorch | 10 pytorch常見運算詳解

小白學PyTorch | 9 tensor數據結構與存儲結構

小白學PyTorch | 8 實戰之MNIST小試牛刀

小白學PyTorch | 7 最新版本torchvision.transforms常用API翻譯與講解

小白學PyTorch | 6 模型的構建訪問遍歷存儲(附代碼)

小白學PyTorch | 5 torchvision預訓練模型與數據集全覽

小白學PyTorch | 4 構建模型三要素與權重初始化

小白學PyTorch | 3 淺談Dataset和Dataloader

小白學PyTorch | 2 淺談訓練集驗證集和測試集

小白學PyTorch | 1 搭建一個超簡單的網絡

小白學PyTorch | 動態圖與靜態圖的淺顯理解

參考目錄:

  • 1 安裝

  • 2 標量可視化

  • 3 權重直方圖

  • 4 特征圖可視化

  • 5 模型圖的可視化

  • 6 卷積核的可視化

本章節來初次使用tensorboard來可視化pytorch深度學習中的一些內容,主要可視化的內容包括:標量變化(模型損失、準確率等);權重值的直方圖;特征圖的可視化;模型圖的可視化;卷積核的可視化。

其實tensorboard一開始是給tensorflow使用的可視化工具,PyTorch框架自己的可視化工具是Visdom,但是這個API需要設置的參數過于復雜,而且功能不太方便也不強大,所以有人寫了一個庫函數TensorboardX來讓PyTorch也可以使用tensorboard。

1 安裝

安裝非常的簡單,直接需要安裝tensorboardX,tensorboard和tensorflow三個庫函數:

#?控制臺運行 pip?install?tensorboardX pip?install?tensorboard pip?install?tensorflow

這時候我們就已經安裝完成了。

2 標量可視化

這里我是用的是第8課的MNIST作為基本代碼,然后在其中增加可視化的功能。

先導入庫函數

#?導入可視化模塊 from?tensorboardX?import?SummaryWriter writer?=?SummaryWriter('../result_tensorboard')

這里面的writer就是我們要記錄的一個寫入tensorboard的一個接口。這個../result_tensorboard就是數據保存的具體位置。

????for?batch_idx,?(data,?target)?in?enumerate(train_loader):#...省略一些代碼...if?(batch_idx?+?1)?%?50?==?0:print('Train?Epoch:?{}?[{}/{}?({:.0f}%)]\tLoss:?{:.6f}'.format(epoch,?(batch_idx?+?1)?*?len(data),?len(train_loader.dataset),100.?*?(batch_idx?+?1)?/?len(train_loader),?loss.item()))writer.add_scalar('loss',loss.item(),tensorboard_ind)tensorboard_ind?+=?1

關鍵就是writer.add_scalar(),其中有三個關鍵的參數:

def add_scalar(self, tag, scalar_value, global_step):

  • tag就是一個字符串吧,在上面的代碼中,我是每50個batch記錄一次loss的值,所以這個tag就是'loss':

  • scalar_value就是這一次記錄的標量了,上面記錄的就是loss.item()。這個loss的變化應該會輸出一個折線圖的吧,這個scalar_value就是y軸的值;

  • global_step其實就是折線圖的x軸的值,所以我每記錄一個點就把tensorboard_ind加一。

運行上面的代碼,會生成這樣的一個文件:這個events.out.巴拉巴拉這個文件就是代碼中保存的標量,我們需要在控制臺啟動tensorboard來可視化:

tensorboard?--logdir==D:\Kaggle\result_tensorboard

這個--logdir=后面跟上之前writer定義的時候的那個地址,也就是../result_tensorboard,然后運行。

運行結果為:點擊上圖中的藍色字體,會彈出一個網頁,這個網頁就是tensorboald的可視化面板。

從圖中可以看到一個標量的折線圖,就是我們的loss。

3 權重直方圖

增加部分代碼,目的是在每一個epoch訓練完成之后,記錄一次模型每一層的參數直方圖。

n_epochs?=?5 for?epoch?in?range(n_epochs):train(epoch,epoch?*?len(train_loader))#?每一個epoch之后輸出網絡中每一層的權重值的直方圖for?i,?(name,?param)?in?enumerate(model.named_parameters()):if?'bn'?not?in?name:writer.add_histogram(name,?param,?epoch)

運行結束之后依然是一個名字很長的數據文件,我們在tensorboard中運行這個文件,展示出直方圖變化,上面的代碼是記錄了一個網絡中所有層的權重值直方圖,在具體任務中,可以只需要輸出某一些層的權重直方圖即可。

4 特征圖可視化

在代碼中的train函數內,增加了這樣一段代碼:

#?第一個batch記錄數據 if?batch_idx?==?0:out1?=?model.features1(data[0:1,:,:,:])out2?=?model.features(out1)grid1?=?make_grid(out1.view(-1,1,out1.shape[2],out1.shape[3]),?nrow=8)grid2?=?make_grid(out2.view(-1,1,out1.shape[2],out1.shape[3]),?nrow=8)writer.add_image('features1',?grid1,?global_step=epoch)writer.add_image('features',?grid2,?global_step=epoch)

就是讓第一個batch的第一個樣本放到模型中,然后把卷積輸出的特征圖輸出成out1和out2,然后使用torchvision.utils.make_grid函數把特征圖變成網格的形式。然后寫道writer里面,標簽是'features1'和'features'。

運行tensorboard結果:

在features1中可以比較明顯的看到32個‘6’的圖片,這個是一個樣本的特征圖的32個通道的展示,上面的那個feature在檢查代碼之后,雖然看起來是4個圖片,但是其實是64個通道,只是每個特征圖都很小所以看起來比較模糊和迷惑。這也是因為MNIST數據集中是28尺寸的輸入圖片,對于Imagenet的大圖片一般都蠶蛹224或者448像素的輸入,就會好一些。

總之這是特征圖的展示。我專門錄了一個這個tensorboard的GIF展示。

5 模型圖的可視化

這個非常的簡單:

model?=?Net().to(device) writer.add_graph(model,?torch.rand([1,3,28,28]))

這里呢有一個問題,就是自己定義的模型結構會顯示不出來。目前在網上搜索過但是沒有比較好的解決方案,所以這里就不作模型的可視化了。對于部分官方提供的模型是可以可視化的,下面展示的是官方可視化的效果:

其實個人感覺,這個模型結構可視化的結果也不是非常的好看。而且對于模型可視化的結果還有其他的辦法,所以不用tensorboard也罷。tensorboard來可視化loss,特征圖等的功能也足夠了。

6 卷積核的可視化

#?卷積核的可視化 for?idx,?(name,?m)?in?enumerate(model.named_modules()):if?name?==?'features1':print(m.weight.shape)in_channels?=?m.weight.shape[1]out_channels?=?m.weight.shape[0]k_w,k_h?=?m.weight.shape[3],m.weight.shape[2]kernel_all?=?m.weight.view(-1,?1,?k_w,?k_h)??#?每個通道的卷積核kernel_grid?=?make_grid(kernel_all,??nrow=in_channels)writer.add_image(f'{name}_kernel',?kernel_grid,?global_step=epoch)

這個個也比較好理解,之前的關于卷積的基礎知識,模型的遍歷都講過了,所以這里相信大家都沒有什么比較難理解的地方了。

運行結果:

這里就非常的好奇,怎么設置才可以讓這個圖像不那么的糊

今天的講解到此為止。代碼已經在后臺更新。

- END -

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/662nyZF本站qq群704220115。加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):

總結

以上是生活随笔為你收集整理的【小白学PyTorch】14.tensorboardX可视化教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。