• 深度学习(14)—— 关于Tensorboard


    深度学习(14)—— 关于Tensorboard


    在模型训练过程中loss和acc都会发生变化,常常需要记录这些值,以便后期调整参数时有的根据,我刚开始用tf的时候里面有个function可以记录到checkpoint中,后来换用pytorch,自己懒得琢磨,就直接建立一个log列表记录每个epoch的train-loss,val-loss,train-acc和val-acc,以及其他的参数如learning-rate,weight-decay等。之前在一些代码中看到tensorboard,当时拿来用了用,但是也没有详细研究,直到一周前,一个同门要用,然后师兄自己以前也没研究过,他自己搞明白后,给大家做了个知识普及。好用的东西当然要拿出来和大家分享啦~( 先在此感谢师兄大晚上九点半不回家给大家讲完这个小知识点,属实辛苦

    前言

    • 需要先安装好tensorboard的package
    • 导入tensorboard
    from torch.utils.tensorboard import SummaryWriter
    
    • 1
    • 创建日志文件夹
      创建该文件夹,可以理解为这个项目的log文件都保存在这个文件夹下,里面可以根据参数的不同建立显得子文件夹,在实例化中进行
    import os
    import torch
    log_dir = rf'./logs_{grade}'
    if not os.path.exists(log_dir):
        os.mkdir(log_dir)
    else:
        print(f'{log_dir} exist')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 实例化tensorboard
      在大的log文件夹中会新建一个文件夹,文件夹的名字是batch…(我以batch,学习率,weight_decay和gamma值作为子文件夹名)
    tb_writer = SummaryWriter(log_dir= f'{log_dir}/batch_{batch_size}_lr_{learning_rate}_wd_{weight_decay}_gamma_{gamma}') # 保存日志到 logs/lr_1e-4_batch_16/ 下
    
    • 1

    最后的log文件夹会是这样子的
    在这里插入图片描述

    1. “一参数一图”

    add_scalar()

            tb_writer.add_scalar('train/loss', train_loss, epoch)
            tb_writer.add_scalar('train/acc', train_acc, epoch)
            tb_writer.add_scalar('val/loss', val_loss, epoch)
            tb_writer.add_scalar('val/acc', val_acc, epoch)
            tb_writer.add_scalar('learning_rate', optimizer.param_groups[0]["lr"], epoch)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    解释一下:最后会产生train,val和learning_rate三栏,第一栏里面有两个figure分别是loss和acc,第二栏有两个figure,第三栏有一个figure
    在这里插入图片描述
    在这里插入图片描述

    2.“多参数一图”

    add_scales()

           tb_writer.add_scalars('loss/',{'train':train_loss,'validate':val_loss},epoch)
           tb_writer.add_scalars('accuracy/',{'train':train_acc,'validate':val_acc},epoch)
           tb_writer.add_scalar('learning_rate',optimizer.param_groups[0]["lr"],epoch)
    
    • 1
    • 2
    • 3

    解释一下:最后会产生loss,accuracy和learning-rate三栏,每一栏只有一个figure,表示不同的阶段。学习率还是一个参数,只有前两个是两个参数。注意,重要的事情说三遍:想要多个参数一定是add_scales!!!加s,加s,加s!!!然后后面使用字典形式列出需要可视化的参数!!!
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    OK,截止目前我用只用到这些,其实tensorboard还有其他的功能,如保存模型中间生成的figure等,可以通过这个来检查模型的有效性,但是呢,我还没有看,其实因为我还没试用,但是看效果是OK的。我也付一下test代码,你们用的话自取。

    3. “一栏一图”

    from PIL import Image
    import numpy as np
    writer = SummaryWriter(log_dir= f'{log_dir}/lr_1e-4_batch_18')
    img_HWC = np.array(Image.open('train_valid/image/1.png').convert('RGB'))  # 彩色图
    img_HW = np.array(Image.open('train_valid/image/1.png').convert('L')) # 灰度图
    # If you have non-default dimension setting, set the dataformats argument.
    for  i in range(5):
        writer.add_image('my_image_HWC', img_HWC, i, dataformats='HWC')
        writer.add_image('my_image_HW', img_HW, i, dataformats='HW')
    writer.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注:保存图片支持numpy和tensor,不支持PIL的image,需要转换!RGB和灰度图是add的时候dataformat是不同的!

    4. “一栏多图”

    from PIL import Image
    import numpy as np
    writer = SummaryWriter(log_dir= f'{log_dir}/lr_1e-4_batch_18')
    
    img_batch = np.zeros((5, 584, 565,3))
    label_batch = np.zeros((5, 1, 584, 565))
    for ind,i in enumerate(os.listdir('train_valid/image/')[0:5]):
        image  = np.array(Image.open(fr'train_valid/image/{i}'))
        label = np.array(Image.open(fr'train_valid/mask/{i}').convert('L'))
        img_batch[ind,:,:,:] = image
        label_batch[ind,0,:,:] = label
    print(label_batch.shape)
    # If you have non-default dimension setting, set the dataformats argument.
    writer.add_images('batch/image', img_batch, 0, dataformats='NHWC') # 彩色batch
    writer.add_images('batch/label', label_batch,0, dataformats='NCHW') # 灰度batch 必须是NCHW
    writer.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    注:可以保存一个batch的图片!保存RGB和灰度图的时候dataformat是不同的!

    如果是:

    • RGB:NHWC/NCHW都可以
    • 灰度:只能NCHW

    5.使用

    昨天太仓促,忘记写怎么查看可视化这些log文件呢?
    linux:tensorboard --logdir='logs_dir'
    windows:tensorboard.exe --logdir='logs_dir'
    (其中的logs_dir是上面创建的文件夹name)

  • 相关阅读:
    Python安装
    monaco-editor 行号、内容装饰器
    Libuv Timer定时器
    制作一个简单HTML游戏网页(HTML+CSS)仿龙之谷网络游戏官网
    dpi是什么?如何更改dpi?(仅个人笔记,可能有误)
    ardupilot 卡尔曼滤波器学习
    oracle-使用PLSQL工具自行修改用户密码
    浅谈Rust内存管理
    微信小程序
    Centos7.9环境下keepalived结合nginx实现负载均衡的高可用(亲测版)
  • 原文地址:https://blog.csdn.net/qq_43368987/article/details/127978692