使用PyTorch的TensorBoard-可視化深度學(xué)習(xí)指標(biāo) | PyTorch系列(二十五)
點擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達

在本系列的這一點上,我們剛剛完成了訓(xùn)練過程中的網(wǎng)絡(luò)運行。現(xiàn)在,我們希望獲得有關(guān)此過程的更多指標(biāo),以更好地了解幕后情況。
鳥瞰我們在訓(xùn)練過程中所處的位置。
準(zhǔn)備數(shù)據(jù)
建立模型
訓(xùn)練模型
分析模型的結(jié)果
為此使用TensorBoard
TensorBoard:TensorFlow的可視化工具包
TensorBoard提供了機器學(xué)習(xí)實驗所需的可視化和工具:
跟蹤和可視化指標(biāo),例如損失和準(zhǔn)確性
可視化模型圖(操作和圖層)
查看權(quán)重,偏差或其他張量隨時間變化的直方圖
將embedding 投影到較低維度的空間
顯示圖像,文本和音頻數(shù)據(jù)
分析TensorFlow程序
以及更多
從PyTorch 1.1.0版開始,PyTorch添加了一個tensorboard實用程序包,使我們能夠?qū)ensorBoard與PyTorch一起使用。
print(torch.__version__)1.1.0
from torch.utils.tensorboard import SummaryWriter為PyTorch安裝TensorBoard
要為PyTorch安裝TensorBoard,請執(zhí)行以下步驟:
確認您正在運行PyTorch版本1.1.0或更高版本。
確認您正在運行TensorBoard 1.15或更高版本。
請注意,PyTorch使用的TensorBoard與為TensorFlow創(chuàng)建的TensorBoard相同。使用以下命令檢查系統(tǒng)上安裝的TensorBoard的版本:
tensorboard --version4. 使用以下命令安裝TensorBoard。
pip install tensorboard一旦安裝了TensorBoard 1.15或更高版本,我們就可以開始了!
請注意,PyTorch文檔說TensorBoard版本1.14是必需的。
PyTorch的TensorBoard入門
TensorBoard是一個字體結(jié)尾的Web界面,實際上從文件中讀取數(shù)據(jù)并顯示它。要使用TensorBoard,我們的任務(wù)是將我們要顯示的數(shù)據(jù)保存到TensorBoard可以讀取的文件中。
為了使我們更輕松,PyTorch創(chuàng)建了一個名為SummaryWriter的實用程序類。要訪問此類,我們使用以下導(dǎo)入:
from torch.utils.tensorboard import SummaryWriter導(dǎo)入該類后,我們可以創(chuàng)建該類的實例,然后將其用于將數(shù)據(jù)從程序中獲取到文件系統(tǒng)中,然后由TensorBoard進行使用。
網(wǎng)絡(luò)圖和訓(xùn)練集圖像
SummaryWriter類帶有許多方法,我們可以調(diào)用這些方法來有選擇地選擇和選擇我們希望TensorBoard可以使用的數(shù)據(jù)。首先,我們將網(wǎng)絡(luò)和一批圖像傳遞給編寫者。
tb = SummaryWriter()network = Network()images, labels = next(iter(train_loader))grid = torchvision.utils.make_grid(images)tb.add_image('images', grid)tb.add_graph(network, images)tb.close()
該代碼為TensorBoard創(chuàng)建一個名為tb的SummaryWriter實例。然后,創(chuàng)建我們的PyTorch網(wǎng)絡(luò)的實例,并從我們的PyTorch數(shù)據(jù)加載器對象中解壓縮一批圖像和標(biāo)簽。
然后,將圖像和網(wǎng)絡(luò)添加到TensorBoard將使用的文件中。實際上,可以說網(wǎng)絡(luò)圖和圖像的batch都已添加到TensorBoard中。
運行TensorBoard
要啟動TensorBoard,我們需要在終端上運行tensorboard命令。這將啟動一個本地服務(wù)器,該服務(wù)器將為TensorBoard UI和我們的SummaryWriter寫入磁盤的數(shù)據(jù)提供服務(wù)。
默認情況下,PyTorch SummaryWriter對象將數(shù)據(jù)寫入在當(dāng)前工作目錄中創(chuàng)建的名為./runs的目錄中的磁盤。
當(dāng)運行tensorboard命令時,我們傳遞一個參數(shù)來告訴tensorboard數(shù)據(jù)在哪里。就像這樣:
tensorboard --logdir=runsTensorBoard服務(wù)器將啟動并正在偵聽端口6006上的http請求。這些詳細信息將顯示在控制臺中。
通過瀏覽至以下位置訪問TensorBoard UI:
http://localhost:6006在這里,我們將能夠看到我們的網(wǎng)絡(luò)圖和圖像數(shù)據(jù)。目前,這確實為我們提供了視覺效果,但沒有接下來的有用。
TensorBoard直方圖和標(biāo)量
我們可以添加到TensorBoard的下一個數(shù)據(jù)導(dǎo)入類型是數(shù)字數(shù)據(jù)。我們可以添加將隨時間或epoch 顯示的標(biāo)量值。我們還可以將值添加到直方圖中以查看值的頻率分布。
要添加標(biāo)量和直方圖,我們使用PyTorch SummaryWriter類提供的相應(yīng)方法。
這是調(diào)用的示例:
tb.add_scalar('Loss', total_loss, epoch)tb.add_scalar('Number Correct', total_correct, epoch)tb.add_scalar('Accuracy', total_correct / len(train_set), epoch)tb.add_histogram('conv1.bias', network.conv1.bias, epoch)tb.add_histogram('conv1.weight', network.conv1.weight, epoch)tb.add_histogram('conv1.weight.grad', network.conv1.weight.grad, epoch)
這是一個示例,說明了如何將這些調(diào)用放在訓(xùn)練循環(huán)中:
network = Network()train_loader = torch.utils.data.DataLoader(train_set, batch_size=100)optimizer = optim.Adam(network.parameters(), lr=0.01)images, labels = next(iter(train_loader))grid = torchvision.utils.make_grid(images)tb = SummaryWriter()tb.add_image('images', grid)tb.add_graph(network, images)for epoch in range(1):total_loss = 0total_correct = 0for batch in train_loader: # Get Batch# Pass Batch# Calculate Loss# Calculate Gradient# Update Weightstb.add_scalar('Loss', total_loss, epoch)tb.add_scalar('Number Correct', total_correct, epoch)tb.add_scalar('Accuracy', total_correct / len(train_set), epoch)tb.add_histogram('conv1.bias', network.conv1.bias, epoch)tb.add_histogram('conv1.weight', network.conv1.weight, epoch)tb.add_histogram('conv1.weight.grad',network.conv1.weight.grad,epoch)print("epoch", epoch,"total_correct:", total_correct,"loss:", total_loss)tb.close()
這會將這些值添加到TensorBoard中。這些值甚至在網(wǎng)絡(luò)訓(xùn)練時實時更新。
隨時間推移查看損失和準(zhǔn)確性值會很有幫助。但是,我們可能需要承認,實際上并不需要TensorBoard。
TensorBoard的真正功能是它具有開箱即用的比較多個運行的功能。這使我們能夠通過更改超參數(shù)值并比較運行來快速進行實驗,以查看哪些參數(shù)最有效。
文章中內(nèi)容都是經(jīng)過仔細研究的,本人水平有限,翻譯無法做到完美,但是真的是費了很大功夫,希望小伙伴能動動你性感的小手,分享朋友圈或點個“在看”,支持一下我?^_^
英文原文鏈接是:
https://deeplizard.com/learn/video/pSexXMdruFM



加群交流
歡迎小伙伴加群交流,目前已有交流群的方向包括:AI學(xué)習(xí)交流群,目標(biāo)檢測,秋招互助,資料下載等等;加群可掃描并回復(fù)感興趣方向即可(注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱)

