• pytorch tensorboard在本地和远程服务器使用,两条loss曲线画一个图上


    一. 安装包

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

     
     
  • 相关阅读:
    2019 icpc南昌全国邀请赛-网络选拔赛J题 树链剖分+离线询问
    Android小项目之十二 设置中心的界面
    【Mood-5】14条建议,使你的IT职业生涯更上一层楼
    【Android 界面效果15】Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
    单线程模型中Message、Handler、Message Queue、Looper之间的关系
    140个google面试题
    Android小项目之十一 应用程序的主界面
    Android小项目之十 应用程序更新的签名问题
    Android小项目之九 两种上下文的区别
    Android小项目之八 界面细节
  • 原文地址:https://www.cnblogs.com/picassooo/p/14097394.html
Copyright © 2020-2023  润新知