廣州中小企業(yè)網(wǎng)站建設免費發(fā)帖推廣的平臺
目錄
- 1 什么是Tensorboard?
- 2 Tensorboard安裝
- 3 Tensorboard可視化流程
- 4 Tensorboard可視化實例
- 4.1 常量可視化
- 4.2 特征圖可視化
1 什么是Tensorboard?
在深度學習領域,網(wǎng)絡內(nèi)部如同黑箱,其中包含大量的連接參數(shù),這給人工調(diào)試造成極大的困難。Tensorboard
則是神經(jīng)網(wǎng)絡的可視化工具,可以記錄訓練過程的數(shù)字、圖像、運行圖等內(nèi)容,方便研究人員對訓練參數(shù)進行統(tǒng)計,觀察神經(jīng)網(wǎng)絡訓練過程并指導參數(shù)優(yōu)化。
2 Tensorboard安裝
參考Anaconda安裝與Python虛擬環(huán)境配置保姆級圖文教程(附速查字典)創(chuàng)建一個實驗用的虛擬環(huán)境。進入相應虛擬環(huán)境后,輸入以下指令即可安裝。
pip install tensorboardX
pip install tensorboard
安裝完成后,進入環(huán)境
python
from torch.utils.tensorboard import SummaryWriter
若上述指令不報錯即說明安裝成功。
3 Tensorboard可視化流程
Tensorboard
可視化過程主要為:
-
為某次實驗創(chuàng)建數(shù)據(jù)記錄句柄
writer = SummaryWriter(path)
其中path是數(shù)據(jù)記錄日志的存儲路徑。
-
通過
writer
實例的add_xxx
方法向日志寫入不同類型的觀察數(shù)據(jù),主要類型有Scalars
:在模型訓練期間顯示不同的有用信息
Graphs
:顯示模型
Histogram
:使用直方圖顯示權(quán)重
Distribution
:顯示權(quán)重分布
Projector
:顯示主成分分析和T-SNE算法,用于降維 -
啟動
Tensorboard
可視化引擎tensorboard --logdir=<your_log_dir>
其中
<your_log_dir>
可以是單次實驗的日志所在路徑,也可以是多次實驗的父級目錄,Tensorboard
會自動橫向比較各次實驗曲線。
4 Tensorboard可視化實例
4.1 常量可視化
這邊給大家提供一個很方便的裝飾器,實現(xiàn)過程如下
from tensorboardX import SummaryWriter
import os, timeclass Visualizer:def __init__(self) -> None:pass@staticmethoddef visual_scale(title: str, path: str, cover: bool=True):'''* @breif: 可視化模型標量數(shù)據(jù)* @param[in]: title -> 圖表名稱* @param[in]: path -> 可視化數(shù)據(jù)存儲路徑* @param[in]: cover -> 是否覆蓋已有可視化數(shù)據(jù)'''def scale(func):def wrap(*args, **kwargs):writer = SummaryWriter(log_dir=Visualizer.coverFile(path, cover))result = func(*args, **kwargs)if len(result) > 0:data_num = len(result[next(iter(result))])for i in range(data_num):writer.add_scalars(title, {k: v[i] for k, v in result.items()}, i)return resultreturn wrapreturn scale
使用起來只需要一句話,注意要構(gòu)造一個字典,記錄將要傳遞給tensorboard
的數(shù)據(jù):
@visual_scale('loss', './log/fcnn')
def main(model, epochs: int, save: bool=False) -> None:# 生成優(yōu)化器——隨機梯度下降optimizer = torch.optim.SGD(model.parameters(), 1e-3)lossParam = {"trainLoss": [], "validLoss": []}for i in range(epochs):lossParam["trainLoss"].append(train(i, epochs, model, optimizer))lossParam["validLoss"].append(validate(i, epochs, model))if save:torch.save(model.state_dict(), r"model/{}.pth".format(model.__str__))return lossParam
4.2 特征圖可視化
同樣用裝飾器的形式構(gòu)造一個可視化卷積核的工具函數(shù)
def visual_kernal(title: str, path: str, append: bool=False):def kernal(func):def warp(*args, **kwargs):if not append and os.path.exists(path):delFiles(path)writer = SummaryWriter(log_dir=path)result = func(*args, **kwargs)try:model = kwargs['model']for name, param in model.named_parameters():if 'conv' in name.lower() and 'weight' in name:Cout, Cin, Kh, Kw = param.size()kernelAll = param.reshape(-1, 1, Kw, Kh) # 每個通道的卷積核kernelGrid = vutils.make_grid(kernelAll, nrow=Cin)writer.add_image(f'{title}--{name}', kernelGrid, global_step=0)except:raise AttributeError("被修飾函數(shù)傳入的模型不存在或參數(shù)格式有誤!")return resultreturn warpreturn kernal
🔥 更多精彩專欄:
- 《ROS從入門到精通》
- 《Pytorch深度學習實戰(zhàn)》
- 《機器學習強基計劃》
- 《運動規(guī)劃實戰(zhàn)精講》
- …