pytorch 绘制多个算法loss_pytorch tensorboard在本地和远程服务器使用,两条loss曲线画一个图上...

一. 安装包

pytorch版本最好大于1.1.0。查看PyTorch版本的命令为torch.__version__

tensorboard若没有的话,可用命令conda install tensorboard安装,也可以用命令pip install tensorboard安装。

注意:

tensorboard可以直接实现可视化,不需要安装TensorFlow;

tensorboard和tensorboard_logger是不同的包,包含的函数也不相同,虽然总体上用法相似。

二. 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在服务器上使用

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来建立隧道的方法,如果尝试没有成功,可以参考这篇博客:,讲得更清楚一些。

4.2. Mac或Linux系统

· 在登录远程服务器的时候使用命令:

ssh -L 16006:127.0.0.1:6006 [email protected]

(代替一般ssh远程登录命令:ssh [email protected])

·训练完模型之后使用如下命令:

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图像:

你可能感兴趣的:(pytorch,绘制多个算法loss)