基本使用
首先需要安装tensorboard
# -U 表示如果存在则升级
pip3 install -U tensorboard
接着就可以直接在代码中使用
from torch.utils.tensorboard import SummaryWriter
...
# 默认会在项目路径下创建 runs 文件夹
dashboard = SummaryWriter()
...
dashboard.add_scalar('Loss/train', loss.item(), i)
...
dashboard.close()
查看图表
tensorboard --logdir=./runs

显示模型学习量变化
for idx, (x, y) in enumerate(test_data_loader):
...
# 显示所有学习量变化
for name, parm in model.named_parameters():
dashboard.add_histogram('Weight/'+name, parm, i)
# 仅显示指定学习量
dashboard.add_histogram('Weight/myweigth', model.fc.weight, i)
...
Histogram


需要知道的是,上图中,虽然只是 gru.bias_hh_l1
的取值变化,但这个bias并不只是代表一个值,而是一堆值(想象一个线性方程组中的参数),故它只是反应这一堆值的分布
变化,而不是追踪其中一个值的变化
事实上,并不能单纯地直接将横轴理解为学习量的取值,它仅表示一个范围。具体地,例如你不能直接从图中看出取值为0的学习量有多少(-0.0269同理),你只能通过计算 (-0.01, +0.01) 这个区间内的积分,大致估算出取值为0的有多少。
DISTRIBUTIONS
Distributions图和Histogram图是同源的,也就是说他俩是同一数据的不同展示形式。他们都展示的是某学习量的分布情况,相较而言,我认为Distributions更直观


初始化权重
def init_weight(m):
if isinstance(m, torch.nn.GRU):
m.weight_ih_l0.data.fill_(1)
m.weight_hh_l0.data.fill_(1)
m.bias_ih_l0.data.fill_(0)
m.bias_hh_l0.data.fill_(0)
...
model.apply(init_weight)
在一个图中显示多条曲线
创建多个SummaryWriter对象并指定不同的目录,添加数据项时指定相同的名称即可
dashboard1 = SummaryWriter('./runs/1')
dashboard2 = SummaryWriter('./runs/2')
for i in range(100):
dashboard1.add_scalar('mychart', i, i)
dashboard2.add_scalar('mychart', i*2, i)
在其 公共父目录
启动
tensorboard --logdir=./runs
将生成的两个日志目录都勾上即可
