安装

1
pip install tensorboard

开启服务

1
tensorboard --logdir= 日志目录(不需要加引号) --port 端口号

端口转发

注意:如果服务器是远程的,还要设置端口转发到本地
即:
ssh转发指令:

1
ssh -L 16006:127.0.0.1:6006

具体使用

前置工作

1
2
from torch.utils.tensorboard import SummaryWriter   
writer = SummaryWriter('./path/to/log')

loss/acc图表的绘制

折线图一般使用scalar绘制

1
2
3
4
writer.add_scalar(tag, scalar_value, global_step=None, walltime=None)
tag:图的名字
scalar_vale:纵坐标y值
global_step:横坐标x值

同一个section显示多个loss

1
2
3
writer.add_scalar('loss/loss1', loss1, epoch)
writer.add_scalar('loss/loss2', loss2, epoch)
writer.add_scalar('loss/loss3', loss3, epoch)

官方提供的例子:

1
2
3
4
5
6
7
8
9
10
11
from torch.utils.tensorboard import SummaryWriter
import numpy as np

writer = SummaryWriter()

for n_iter in range(100):
writer.add_scalar('Loss/train', np.random.random(), n_iter)
writer.add_scalar('Loss/test', np.random.random(), n_iter)
writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
writer.add_scalar('Accuracy/test', np.random.random(), n_iter)

同一图内多条曲线

使用add_scalars实现
注意:横坐标必须一致

1
2
3
4
5
6
7
8
9
10
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
r = 5
for i in range(100):
writer.add_scalars('run_14h', {'xsinx':i*np.sin(i/r),
'xcosx':i*np.cos(i/r),
'tanx': np.tan(i/r)}, i)
writer.close()
# This call adds three values to the same scalar plot with the tag
# 'run_14h' in TensorBoard's scalar section.

模型结构图的绘制

虽然说这方法能绘制模型结构图,但其实怀疑只能生成结构简单的图,或者是CNN等的图,我试了几次没有成功。

1
2
3
4
5
6
add_graph(model, input_to_model=None, verbose=False, use_strict_trace=True)

model (torch.nn.Module) – Model to draw.
input_to_model (torch.Tensor or list of torch.Tensor) – A variable or a tuple of variables to be fed.
verbose (bool) – Whether to print graph structure in console.
use_strict_trace (bool) – Whether to pass keyword argument strict to torch.jit.trace. Pass False when you want the tracer to record your mutable container types (list, dict)

embedding图的绘制

我是真没想到这个还能画embedding的图

1
2
3
4
5
6
7
add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)

mat (torch.Tensor or numpy.ndarray) – A matrix which each row is the feature vector of the data point
metadata (list) – A list of labels, each element will be convert to string
label_img (torch.Tensor) – Images correspond to each data point
global_step (int) – Global step value to record
tag (str) – Name for the embedding

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

import keyword
import torch
meta = []
while len(meta)<100:
meta = meta+keyword.kwlist # get some strings
meta = meta[:100]

for i, v in enumerate(meta):
meta[i] = v+str(i)

label_img = torch.rand(100, 3, 10, 32)
for i in range(100):
label_img[i]*=i/100.0

writer.add_embedding(torch.randn(100, 5), metadata=meta, label_img=label_img)
writer.add_embedding(torch.randn(100, 5), label_img=label_img)
writer.add_embedding(torch.randn(100, 5), metadata=meta)

未完待续

后续可能还会有补充

参考链接

pytorch官方文档