pytorch tensorboard
转载:https://zhuanlan.zhihu.com/p/103630393
安装
pip install tensorboard
使用逻辑
- 将代码运行过程中的,某些你关心的数据保存在一个文件夹中
这一步由代码中的writer完成 - 再读取这个文件夹中的数据,用浏览器显示出来
这一步通过在命令行运行tensorboard完成。
使用代码
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter('./path/to/log')
# 针对数值
writer.add_scalar(tag, scalar_value, global_step=None, walltime=None)
这里的tag指定可视化时这个变量的名字,scalar_value是你要存的值,global_step可以理解为x轴坐标。
简单例子
for epoch in range(100)
mAP = eval(model)
writer.add_scalar('mAP', mAP, epoch)
除了数值还能展示图像
命令行启动tensorboard
tensorboard --logdir=./path/to/the/folder --port 6006
然后打开浏览器,访问地址http://localhost:6006/即可。这里的6006只是随便一个例子,用其他的未被占用端口也没有任何问题,注意命令行的端口与浏览器访问的地址同步。
另一点要注意的是tensorboard并不是实时显示(visdom是完全实时的),而是默认30秒刷新一次。
其他使用
1.变量归类
命名变量的时候可以使用形如
writer.add_scalar('loss/loss1', loss1, epoch)
writer.add_scalar('loss/loss2', loss2, epoch)
writer.add_scalar('loss/loss3', loss3, epoch)
这样3个loss就会被显示在同一个section。
2.同时显示多个折线图
假如使用了两种学习率去训练同一个网络,想要比较它们训练过程中的loss曲线,只需要将两个日志文件夹放到同一目录下,并在命令行运行
tensorboard --logdir=./path/to/the/root --port 6006
3.add_scalar
和add_scalars
参考:https://www.zhihu.com/question/294537782
法与add_scalar
的差别在于add_scalars
在一张图中可以绘制多个曲线,我们只需要以字典的形式传入参数即可
add_scalar
使用
for epoch, (train_loss, val_loss) in enumerate(zip(train_losses, val_losses)):
writer.add_scalars('Loss', {'train loss': train_loss, 'val loss': val_loss}, epoch)
writer.add_scalar('Train', train_loss, epoch)
writer.add_scalar('Validation', val_loss, epoch)
add_scalars
使用
train_losses, val_losses = train(net, *data, num_epochs, learning_rate,weight_decay, batch_size)
writer = SummaryWriter(f'./logs/mynet/fold_{i + 1}')
for epoch, (train_loss, val_loss) in enumerate(zip(train_losses, val_losses)):
writer.add_scalars('Loss', {'train loss': train_loss, 'val loss': val_loss}, epoch)