pytorch使用tensorboardX進(jìn)行l(wèi)oss可視化實(shí)例
最近pytorch出了visdom,也沒有怎么去研究它,主要是覺得tensorboardX已經(jīng)夠用,而且用起來也十分的簡(jiǎn)單
pip install tensorboardX
然后在代碼里導(dǎo)入
from tensorboardX import SummaryWriter
然后聲明一下自己將loss寫到哪個(gè)路徑下面
writer = SummaryWriter('./log')
然后就可以愉快的寫loss到你得這個(gè)writer了
niter = epoch * len(train_loader) + i
writer.add_scalars(args.result_path + 'Train_val_loss', {args.result_path+'train_loss': loss.data.item()}, niter)
其中,add_scalars是將不同得變量添加到同一個(gè)圖下,圖的名稱是add_scalars得第一個(gè)變量
然后為這個(gè)圖中不同得曲線添加不同得標(biāo)題,上面這一行代碼
writer.add_scalars(args.result_path + 'Train_val_loss', {args.result_path+'train_loss': loss.data.item()}, niter)
后面得dict中得key是曲線的名稱,后面的value是對(duì)應(yīng)得append的值,再后面得niter是x坐標(biāo),這句話得意思就相當(dāng)于,對(duì)于圖名稱為args.result_path + 'Train_val_loss'的圖,對(duì)曲線名稱為args.result_path+'train_loss'添加新的點(diǎn),這個(gè)點(diǎn)為(niter, loss.data.item())
同樣的,我可以畫出val的loss
niter = epoch * len(train_loader) + i
writer.add_scalars(args.result_path + 'Train_val_loss', {args.result_path+'val_loss': mean_loss}, niter)
writer保存到了我們剛剛聲明的路徑'./log‘下面,然后終端啟動(dòng)tensorboard
tensorboard --logdir ./log --port 8890
不會(huì)用得進(jìn)行tensorboard --help即可
然后進(jìn)行端口映射就行了
實(shí)際上在使用的過程中,我發(fā)現(xiàn)了,如果你要保存的結(jié)果在各個(gè)子文件夾內(nèi),然后你在父文件夾運(yùn)行tensorboard,就可以在瀏覽器看到各種結(jié)果,而不必再進(jìn)行不同的端口映射

比如上面這個(gè),我的resnet文件夾下有不同的我writer寫入的文件,在父目錄下啟動(dòng)tensorboard之后,

沒毛??!
補(bǔ)充拓展:pytorch產(chǎn)生loss的計(jì)算圖代碼
廢話不多說,直接上代碼
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net,self).__init__()
self.conv1=nn.Conv2d(1,6,5)
self.conv2=nn.Conv2d(6,16,5)
self.fc1=nn.Linear(16*5*5,120)
self.fc2=nn.Linear(120,84)
self.fc3=nn.Linear(84,10)
def forward(self,x):
x=F.max_pool2d(F.relu(self.conv1(x)),(2,2))
x=F.max_pool2d(F.relu(self.conv2(x)),2)
x=x.view(x.size()[0],-1)
print(x)
x=F.relu(self.fc1(x))
x=F.relu(self.fc2(x))
x=self.fc3(x)
return x
net=Net()
#params=list(net.parameters())
#for name,parameters in net.named_parameters():
# print(name,':',parameters.size())
#print(len(params))
#print(net)
input=Variable(t.randn(1,1,32,32))
output=net(input)
#out.size()
target=Variable(t.arange(0,10))
criterion=nn.MSELoss()
loss=criterion(output,target)
loss.grad_fn
以上這篇pytorch使用tensorboardX進(jìn)行l(wèi)oss可視化實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python的Flask框架中使用Flask-SQLAlchemy管理數(shù)據(jù)庫(kù)的教程
在Python中我們可以使用SQLAlchemy框架進(jìn)行數(shù)據(jù)庫(kù)操作,那么對(duì)應(yīng)的在Flask框架中我們可以使用SQLAlchemy,下面我們就來看一下Python的Flask框架中使用Flask-SQLAlchemy管理數(shù)據(jù)庫(kù)的教程2016-06-06
Django 實(shí)現(xiàn)外鍵去除自動(dòng)添加的后綴‘_id’
今天小編就為大家分享一篇Django 實(shí)現(xiàn)外鍵去除自動(dòng)添加的后綴‘_id’,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python實(shí)現(xiàn)RGB等圖片的圖像插值算法
這篇文章主要介紹了通過Python實(shí)先圖片的以下三種插值算法:最臨近插值法、線性插值法以及雙線性插值法。感興趣的小伙伴們可以了解一下2021-11-11
python常規(guī)方法實(shí)現(xiàn)數(shù)組的全排列
這篇文章主要介紹了python常規(guī)方法實(shí)現(xiàn)數(shù)組的全排列,實(shí)例分析了全排列的概念及Python常規(guī)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-03-03
pycharm中代碼回滾到指定版本的兩種實(shí)現(xiàn)方法(附帶截圖展示)
在編寫代碼的時(shí)候,經(jīng)常會(huì)出現(xiàn)寫的代碼存在一些問題,但是比較難以發(fā)現(xiàn)具體存在的問題在哪里,需要將帶代碼恢復(fù)到指定的版本,下面這篇文章主要給大家介紹了關(guān)于pycharm中代碼回滾到指定版本的兩種實(shí)現(xiàn)方法,需要的朋友可以參考下2022-06-06
YOLOv5部署到web端詳細(xì)過程(flask+js簡(jiǎn)單易懂)
YOLOv5是一個(gè)目標(biāo)檢測(cè)模型,Flask是一個(gè)Python的Web框架,下面這篇文章主要給大家介紹了關(guān)于YOLOv5部署到web端(flask+js簡(jiǎn)單易懂)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
Python使用fastapi快速編寫一個(gè)增刪改查的接口
這篇文章主要為大家詳細(xì)介紹了Python如何使用fastapi快速編寫一個(gè)增刪改查的接口,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04

