一. 安装包
pytorch版本最好大于1.1.0。查看PyTorch版本的命令为torch.__version__
tensorboard若没有的话,可用命令conda install tensorboard安装,也可以用命令pip install tensorboard安装。
注意:
- tensorboard可以直接实现可视化,不需要安装TensorFlow;
- tensorboard和tensorboard_logger是不同的包,包含的函数也不相同,虽然总体上用法相似。
二. tensorboard的使用逻辑
【下图摘自知乎文章:PyTorch下的Tensorboard 使用】
三. 本地使用示例
假设我想可视化模型训练过程中的loss,那么就可以在训练的时候,把每个epoch的loss都保存到文件中。
from torch.utils.tensorboard import SummaryWriter # SummaryWriter的作用是将数据以特定的格式存储到文件夹 folder = '/Users/wangpeng/Desktop/tb' # 指定存储文件夹 writer = SummaryWriter(log_dir=folder, flush_secs=30) # 实例化SummaryWriter类,每30秒写入一次到硬盘 for epoch in range(100): loss = 10 - 0.1 * epoch writer.add_scalar('learning_rate', loss, epoch) # 把loss写入到文件夹中
运行程序之后,tb文件夹内就会出现一个文件:
然后打开命令行终端, 输入tensorboard --logdir='/Users/wangpeng/Desktop/tb',如下图绿线所示:
把图中红线的地址复制到google浏览器中,即可看到loss的可视化结果:
四. tensorboard在服务器上使用
【下面的内容来自这篇博文:Tensorboard 在服务器上的使用】
4.1. windows系统
在Windows系统装一个Xshell,在文件->属性->ssh->隧道->添加,类型local,源主机填127.0.0.1(意思是本机),端口设置一个,比如12345,目标主机为服务器,目标端口一般是6006,如果6006被占了可以改为其他端口。
在服务器上运行 tensorboard --logdir='logs' --port =6006
在本机打开网页127.0.0.1:12345
即可查看远程的tensorboard。
注:关于通过Xshell来建立隧道的方法,如果尝试没有成功,可以参考这篇博客:Xshell远程服务器后Tensorboard的本地可视化方法,讲得更清楚一些。
4.2. Mac或Linux系统
· 在登录远程服务器的时候使用命令:ssh -L 16006:127.0.0.1:6006 account@server.address
(代替一般ssh远程登录命令:ssh account@server.address)
·训练完模型之后使用如下命令:
tensorboard --logdir="/path/to/log-directory"
(其中,/path/to/log-directory为自己设定的日志存放路径,因人而异)
·最后,在本地访问地址:http://127.0.0.1:16006/
原理:建立ssh隧道,实现远程端口到本地端口的转发 具体来说就是将远程服务器的6006端口(tensorboard默认将数据放在6006端口)转发到本地的16006端口,在本地对16006端口的访问即是对远程6006端口的访问,当然,转发到本地某一端口不是限定的,可自由选择。
五. 两条曲线画一个图上
程序示例:
import torch import numpy as np from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter(log_dir='/root/wp/action/result_recg/test', flush_secs=30) for j in range(1, 50): i = torch.tensor(j) learning_rate = 0.1 * i x = np.log2(i) y = 2 * np.log2(i) h = 3 * np.log2(i) w = 4 * np.log2(i) writer.add_scalar('learning_rate', i, j) # 把两个图放到一个section writer.add_scalar('loss/x', x, j) writer.add_scalar('loss/y', y, j) # 把两条曲线放到一个图上 writer.add_scalars('acc', {'h': h, 'w': w}, j) # 注意是add_scalars,不是add_scalar
运行结果,得到文件如下:
得到tensorboard图像: