【小白学PyTorch】14.tensorboardX可视化教程
<<小白學(xué)PyTorch>>
小白學(xué)PyTorch | 13 EfficientNet詳解及PyTorch實(shí)現(xiàn)
小白學(xué)PyTorch | 12 SENet詳解及PyTorch實(shí)現(xiàn)
小白學(xué)PyTorch | 11 MobileNet詳解及PyTorch實(shí)現(xiàn)
小白學(xué)PyTorch | 10 pytorch常見運(yùn)算詳解
小白學(xué)PyTorch | 9 tensor數(shù)據(jù)結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)
小白學(xué)PyTorch | 8 實(shí)戰(zhàn)之MNIST小試牛刀
小白學(xué)PyTorch | 7 最新版本torchvision.transforms常用API翻譯與講解
小白學(xué)PyTorch | 6 模型的構(gòu)建訪問遍歷存儲(chǔ)(附代碼)
小白學(xué)PyTorch | 5 torchvision預(yù)訓(xùn)練模型與數(shù)據(jù)集全覽
小白學(xué)PyTorch | 4 構(gòu)建模型三要素與權(quán)重初始化
小白學(xué)PyTorch | 3 淺談Dataset和Dataloader
小白學(xué)PyTorch | 2 淺談?dòng)?xùn)練集驗(yàn)證集和測試集
小白學(xué)PyTorch | 1 搭建一個(gè)超簡單的網(wǎng)絡(luò)
小白學(xué)PyTorch | 動(dòng)態(tài)圖與靜態(tài)圖的淺顯理解
參考目錄:
1 安裝
2 標(biāo)量可視化
3 權(quán)重直方圖
4 特征圖可視化
5 模型圖的可視化
6 卷積核的可視化
本章節(jié)來初次使用tensorboard來可視化pytorch深度學(xué)習(xí)中的一些內(nèi)容,主要可視化的內(nèi)容包括:標(biāo)量變化(模型損失、準(zhǔn)確率等);權(quán)重值的直方圖;特征圖的可視化;模型圖的可視化;卷積核的可視化。
其實(shí)tensorboard一開始是給tensorflow使用的可視化工具,PyTorch框架自己的可視化工具是Visdom,但是這個(gè)API需要設(shè)置的參數(shù)過于復(fù)雜,而且功能不太方便也不強(qiáng)大,所以有人寫了一個(gè)庫函數(shù)TensorboardX來讓PyTorch也可以使用tensorboard。
1 安裝
安裝非常的簡單,直接需要安裝tensorboardX,tensorboard和tensorflow三個(gè)庫函數(shù):
#?控制臺(tái)運(yùn)行 pip?install?tensorboardX pip?install?tensorboard pip?install?tensorflow這時(shí)候我們就已經(jīng)安裝完成了。
2 標(biāo)量可視化
這里我是用的是第8課的MNIST作為基本代碼,然后在其中增加可視化的功能。
先導(dǎo)入庫函數(shù)
#?導(dǎo)入可視化模塊 from?tensorboardX?import?SummaryWriter writer?=?SummaryWriter('../result_tensorboard')這里面的writer就是我們要記錄的一個(gè)寫入tensorboard的一個(gè)接口。這個(gè)../result_tensorboard就是數(shù)據(jù)保存的具體位置。
????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關(guān)鍵就是writer.add_scalar(),其中有三個(gè)關(guān)鍵的參數(shù):
def add_scalar(self, tag, scalar_value, global_step):
tag就是一個(gè)字符串吧,在上面的代碼中,我是每50個(gè)batch記錄一次loss的值,所以這個(gè)tag就是'loss':
scalar_value就是這一次記錄的標(biāo)量了,上面記錄的就是loss.item()。這個(gè)loss的變化應(yīng)該會(huì)輸出一個(gè)折線圖的吧,這個(gè)scalar_value就是y軸的值;
global_step其實(shí)就是折線圖的x軸的值,所以我每記錄一個(gè)點(diǎn)就把tensorboard_ind加一。
運(yùn)行上面的代碼,會(huì)生成這樣的一個(gè)文件:這個(gè)events.out.巴拉巴拉這個(gè)文件就是代碼中保存的標(biāo)量,我們需要在控制臺(tái)啟動(dòng)tensorboard來可視化:
tensorboard?--logdir==D:\Kaggle\result_tensorboard這個(gè)--logdir=后面跟上之前writer定義的時(shí)候的那個(gè)地址,也就是../result_tensorboard,然后運(yùn)行。
運(yùn)行結(jié)果為:點(diǎn)擊上圖中的藍(lán)色字體,會(huì)彈出一個(gè)網(wǎng)頁,這個(gè)網(wǎng)頁就是tensorboald的可視化面板。
從圖中可以看到一個(gè)標(biāo)量的折線圖,就是我們的loss。
3 權(quán)重直方圖
增加部分代碼,目的是在每一個(gè)epoch訓(xùn)練完成之后,記錄一次模型每一層的參數(shù)直方圖。
n_epochs?=?5 for?epoch?in?range(n_epochs):train(epoch,epoch?*?len(train_loader))#?每一個(gè)epoch之后輸出網(wǎng)絡(luò)中每一層的權(quán)重值的直方圖for?i,?(name,?param)?in?enumerate(model.named_parameters()):if?'bn'?not?in?name:writer.add_histogram(name,?param,?epoch)運(yùn)行結(jié)束之后依然是一個(gè)名字很長的數(shù)據(jù)文件,我們?cè)趖ensorboard中運(yùn)行這個(gè)文件,展示出直方圖變化,上面的代碼是記錄了一個(gè)網(wǎng)絡(luò)中所有層的權(quán)重值直方圖,在具體任務(wù)中,可以只需要輸出某一些層的權(quán)重直方圖即可。
4 特征圖可視化
在代碼中的train函數(shù)內(nèi),增加了這樣一段代碼:
#?第一個(gè)batch記錄數(shù)據(jù) 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)就是讓第一個(gè)batch的第一個(gè)樣本放到模型中,然后把卷積輸出的特征圖輸出成out1和out2,然后使用torchvision.utils.make_grid函數(shù)把特征圖變成網(wǎng)格的形式。然后寫道writer里面,標(biāo)簽是'features1'和'features'。
運(yùn)行tensorboard結(jié)果:
在features1中可以比較明顯的看到32個(gè)‘6’的圖片,這個(gè)是一個(gè)樣本的特征圖的32個(gè)通道的展示,上面的那個(gè)feature在檢查代碼之后,雖然看起來是4個(gè)圖片,但是其實(shí)是64個(gè)通道,只是每個(gè)特征圖都很小所以看起來比較模糊和迷惑。這也是因?yàn)镸NIST數(shù)據(jù)集中是28尺寸的輸入圖片,對(duì)于Imagenet的大圖片一般都蠶蛹224或者448像素的輸入,就會(huì)好一些。
總之這是特征圖的展示。我專門錄了一個(gè)這個(gè)tensorboard的GIF展示。
5 模型圖的可視化
這個(gè)非常的簡單:
model?=?Net().to(device) writer.add_graph(model,?torch.rand([1,3,28,28]))這里呢有一個(gè)問題,就是自己定義的模型結(jié)構(gòu)會(huì)顯示不出來。目前在網(wǎng)上搜索過但是沒有比較好的解決方案,所以這里就不作模型的可視化了。對(duì)于部分官方提供的模型是可以可視化的,下面展示的是官方可視化的效果:
其實(shí)個(gè)人感覺,這個(gè)模型結(jié)構(gòu)可視化的結(jié)果也不是非常的好看。而且對(duì)于模型可視化的結(jié)果還有其他的辦法,所以不用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)??#?每個(gè)通道的卷積核kernel_grid?=?make_grid(kernel_all,??nrow=in_channels)writer.add_image(f'{name}_kernel',?kernel_grid,?global_step=epoch)這個(gè)個(gè)也比較好理解,之前的關(guān)于卷積的基礎(chǔ)知識(shí),模型的遍歷都講過了,所以這里相信大家都沒有什么比較難理解的地方了。
運(yùn)行結(jié)果:
這里就非常的好奇,怎么設(shè)置才可以讓這個(gè)圖像不那么的糊
今天的講解到此為止。代碼已經(jīng)在后臺(tái)更新。
- END -往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開:https://t.zsxq.com/662nyZF本站qq群704220115。加入微信群請(qǐng)掃碼進(jìn)群(如果是博士或者準(zhǔn)備讀博士請(qǐng)說明):總結(jié)
以上是生活随笔為你收集整理的【小白学PyTorch】14.tensorboardX可视化教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】编写同时在PyTorch和T
- 下一篇: 【推荐系统】推荐系统中的排序学习