PyTorch使用tensorboardX

之前用pytorch是手動記錄數據做圖,總是覺得有點麻煩。學習了一下tensorboardX,感覺網上資料有點雜,記錄一下重點。由於大多數情況只是看一下loss,lr,accu這些曲線,就先總結這些,什麼images,audios以後需要再總結。


1.安裝

有各種方法,docker安裝,使用logger.py腳本調用感覺都不簡潔。現在的tensorboardX感覺已經很好了,沒什麼坑。在命令行pip安裝即可

!注意! 這玩意雖然在pytorch下,但是其實是內核是 tensorflow裏面的board,所以安裝之前得先安裝 tensorflow

pip install tensorboardX

2.調用

from tensorboardX import SummaryWriter
writer = SummaryWriter('log')

writer就相當於一個日誌,保存你要做圖的所有信息。第二句就是在你的項目目錄下建立一個文件夾log,存放畫圖用的文件。剛開始的時候是空的。

訓練的循環中,每次寫入 圖像名稱,loss數值, n_iteration

writer.add_scalar('Train/Loss', loss.data[0], niter)

驗證的循環中,寫入預測的準確度即可:

writer.add_scalar('Test/Accu', correct/total, niter)

爲了看得清楚一點,我把整個train_eval寫一起了

def train_eval(epoch):
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
inputs, labels = data
inputs, labels = Variable(inputs), Variable(labels)
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.data[0]
#每2000個batch顯示一次當前的loss和accu
if i % 2000 == 1999:
print('[epoch: %d, batch: %5d] loss: %.3f' %
(epoch + 1, i+1, running_loss / 2000))
running_loss = 0.0
print('[epoch: %d, batch: %5d] Accu: %.3f' %(epoch + 1, i+1, correct/total))

#每10個batch畫個點用於loss曲線
if i % 10 == 0:
niter = epoch * len(trainloader) + i
writer.add_scalar('Train/Loss', loss.data[0], niter)

#每500個batch全驗證集檢測,畫個點用於Accu
if i % 500 == 0:
correct = 0
total = 0
for data in testloader:
images, target = data
res = net(Variable(images))
_, predicted = torch.max(res.data, 1)
total += labels.size(0)
correct += (predicted == target).sum()
writer.add_scalar('Test/Accu', correct/total, niter)

3.顯示

會發現剛剛的log文件夾裏面有文件了。在命令行輸入如下,載入剛剛做圖的文件(那個./log要寫完整的路徑)

tensorboard --logdir=./log

在瀏覽器輸入:

http://0.0.0.0:6006/

就可以看到我們做的兩個圖了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章