Pytorch系列(八):用TensorboardX来记录参数


楼主Pytorch系列中,TensorBoardX的使用教程是一直在规划中的,因总总原因耽搁了,后有读者私信,能不能补上TensorBoardX的使用案例,才想起补上这个坑。
首先来一下,tensorboardX和Tensorboard的区别吧。

以下皆翻译自 https://tensorboardx.readthedocs.io/en/latest/tutorial.html

谷歌的tensorflow的tensorboard是一个web服务器,用于可视化神经网络的训练过程,它可视化标量值、图像、文本等,主要用于保存tensorflow中的事件,比如学习率、loss等。遗憾的是,其他深度学习框架缺少这样的工具,因此,tensorboardX就出现了,这个软件包的目的是让研究人员使用一个简单的界面来记录PyTorch中的事件(然后在tensorboard中显示可视化)。tensorboardX软件包目前支持记录标量、图像、音频、直方图、文本、嵌入和反向传播路径


Pytorch猫狗大战系列:
猫狗大战1-训练和测试自己的数据集
猫狗大战2-AlexNet
猫狗大战3-MobileNet_V1&V2
猫狗大战3-MobileNet_V3


TensorFlow 2.0猫狗大战系列
猫狗大战1、制作与读取record数据
猫狗大战2、训练与保存模型


一、安装tensorboardX

pip3 install tensorboardX

二、使用TensorboardX

2.1 创建 SummaryWriter

想要记录任何事件、日志等,都必须先创建一个SummaryWriter
调用SummaryWriter(object)这个类


class SummaryWriter(object):
    def __init__(
            self,
            logdir: Optional[str] = None,
            comment: Optional[str] = "",
            purge_step: Optional[int] = None,
            max_queue: Optional[int] = 10,
            flush_secs: Optional[int] = 120,
            filename_suffix: Optional[str] = '',
            write_to_disk: Optional[bool] = True,
            log_dir: Optional[str] = None,
            comet_config: Optional[dict] = {"disabled": True},
            **kwargs):
        """Creates a `SummaryWriter` that will write out events and summaries
        to the event file.

        Args:
            logdir: Save directory location. Default is
              runs/**CURRENT_DATETIME_HOSTNAME**, which changes after each run.
              Use hierarchical folder structure to compare
              between runs easily. e.g. pass in 'runs/exp1', 'runs/exp2', etc.
              for each new experiment to compare across them.
            comment: Comment logdir suffix appended to the default
              ``logdir``. If ``logdir`` is assigned, this argument has no effect.
            purge_step:
              When logging crashes at step :math:`T+X` and restarts at step :math:`T`,
              any events whose global_step larger or equal to :math:`T` will be
              purged and hidden from TensorBoard.
              Note that crashed and resumed experiments should have the same ``logdir``.
            max_queue: Size of the queue for pending events and
              summaries before one of the 'add' calls forces a flush to disk.
              Default is ten items.
            flush_secs: How often, in seconds, to flush the
              pending events and summaries to disk. Default is every two minutes.
            filename_suffix: Suffix added to all event filenames in
              the logdir directory. More details on filename construction in
              tensorboard.summary.writer.event_file_writer.EventFileWriter.
            write_to_disk:
              If pass `False`, SummaryWriter will not write to disk.
            comet_config:
              A comet config dictionary. Contains parameters that need to be
              passed to comet like workspace, project_name, api_key, disabled etc
        """

以下对参数的解释

  • logdir 事件保存的路径,默认为 运行/程序的当前\u日期时间\u主机名,每次运行后更改
  • comment 默认目录保存的路径的后缀,如果logdir有值,那这个值就不生效
    一般用这两个参数就够了
from tensorboardX import SummaryWriter
# SummaryWriter encapsulates everything
writer = SummaryWriter(logdir='runs/exp-1')
# creates writer object. The log will be saved in 'runs/exp-1'
writer2 = SummaryWriter()
# creates writer2 object with auto generated file name, the dir will be something like 'runs/Aug20-17-20-33'
writer3 = SummaryWriter(comment='3x learning rate')
# creates writer3 object with auto generated file name, the comment will be appended to the filename. The dir will be something like 'runs/Aug20-17-20-33-3xlearning rate'

以上执行,可以看到,runs目录多出三个文件夹,分别对应writer、writer2、writer3
请添加图片描述

2.2 用浏览器查看tensorboardX生成的事件

在命令行

tensorboard --logdir=./exp-1

浏览器打开 http://localhost:6006/ 即可
请添加图片描述

2.3 使用Add scalar记录数字常量
 add_scalars(main_tag: str,
            tag_scalar_dict: Dict[str, float],
            global_step: Optional[int] = None,
            walltime: Optional[float] = None)`

参数:

  • tag (string): 数据名称,不同名称的数据使用不同曲线展示
  • scalar_value (float): 数字常量值
  • global_step (int, optional): 训练的 step
  • walltime (float, optional): 记录发生的时间,默认为 time.time()

如以下demo:记录 y = x 2 + 1 ( x > 0 ) y = x^2+1 (x>0) y=x2+1(x>0)

"""                
*  * *** *  * *  *      
*  *  *   **  *  *             
****  *   **  *  *                 
*  *  *   **  *  *         
*  * **  *  * ****                

@File    : writer_loger.py
@Date    : 2021/11/10
@Require :
@Author  : https://blog.csdn.net/hjxu2016/
@Funtion : 用tensorboardX来记录事件 y = x^2  (x>0)

"""

from tensorboardX import SummaryWriter

if __name__ == "__main__":

    # SummaryWriter encapsulates everything
    writer = SummaryWriter(logdir='runs/exp-1')

    def func(x):
        y = x**2+1
        return y
    for i in range(10):
        writer.add_scalar('equation', func(i), global_step=i)
        writer.add_scalar('exponential', 2 ** i, global_step=i)

记录了两个曲线:
请添加图片描述

2.4 使用 add_image来记录图片
def add_image(
          self,
          tag: str,
          img_tensor: numpy_compatible,
          global_step: Optional[int] = None,
          walltime: Optional[float] = None,
          dataformats: Optional[str] = 'CHW')

参数

  • tag (string): 数据名称
  • img_tensor (torch.Tensor / numpy.array): 图像数据
  • global_step (int, optional): 训练的 step
  • walltime (float, optional): 记录发生的时间,默认为 time.time()
  • dataformats (string, optional): 图像数据的格式,默认为 ‘CHW’,还可以是 ‘CHW’、‘HWC’ 或 ‘HW’ 等

如Demo记录五个图像:

def writer_img():
    # SummaryWriter encapsulates everything
    writer = SummaryWriter(logdir='runs/exp-add_image')

    img_list = glob.glob(os.path.join("./data", "*.jpg"))
    for i in range(1, 6):
        image = cv2.imread(img_list[i])
        writer.add_image('countdown',
                         cv2.cvtColor(image, cv2.COLOR_BGR2RGB),
                         global_step=i,
                         dataformats='HWC')

进入tensorboard查看,还能调整对比度等
请添加图片描述

注意,这个add_image 一次只能插入一张图像,如果想插入多张图像,可以多张图片拼合成一张图片后,再插入。

2.5 使用add_histogram插入直方图
  def add_histogram(
           self,
           tag: str,
           values: numpy_compatible,
           global_step: Optional[int] = None,
           bins: Optional[str] = 'tensorflow',
           walltime: Optional[float] = None,
           max_bins=None):

参数

  • tag (string): 数据名称
  • values (torch.Tensor, numpy.array, or string/blobname): 用来构建直方图的数据
  • global_step (int, optional): 训练的 step
  • bins (string, optional): 取值有 ‘tensorflow’、‘auto’、‘fd’ 等, 该参数决定了分桶的方式,详见这里。
  • walltime (float, optional): 记录发生的时间,默认为 time.time()
  • max_bins (int, optional): 最大分桶数

参考资料:

详解PyTorch项目使用TensorboardX进行训练可视化

官网地址:https://tensorboardx.readthedocs.io/en/latest/tutorial.html

### 回答1: PyTorch中使用TensorBoard可以通过安装TensorBoardX库来实现。TensorBoardX是一个PyTorch的扩展库,它提供了一种将PyTorch的数据可视化的方法,可以将训练过程中的损失函数、准确率等指标以图表的形式展示出来,方便用户对模型的训练过程进行监控和调试。具体使用方法可以参考TensorBoardX的官方文档。 ### 回答2: PyTorch是一款流行的深度学习框架,用于实现神经网络模型和训练过程。TensorBoard是与TensorFlow框架一起使用的一个可视化工具,方便进行模型训练和性能调优。但是,PyTorch用户也可以充分利用TensorBoard来监控他们的模型。 在PyTorch中使用TensorBoard主要包括以下几个步骤: 1. 安装TensorBoard和TensorFlow:需要在PyTorch的虚拟环境中安装TensorFlow和TensorBoard,这可以使用pip来完成。 2. 导入所需的库:首先,需要导入PyTorch库和TensorFlow库。在这里,PyTorch库用于定义、训练和测试模型,而TensorFlow库用于可视化和监视模型训练过程。可以使用以下代码导入这些库: ``` import tensorflow as tf from torch.utils.tensorboard import SummaryWriter ``` 3. 创建SummaryWriter对象:SummaryWriter是TensorBoard类的主要接口。可以使用它来创建TensorBoard的摘要文件和事件文件。在下面的代码中,可以创建一个名为“runs/xxx”的摘要写入器: ``` writer = SummaryWriter('runs/xxx') ``` 4. 定义模型:在PyTorch中定义模型。在下面的代码中,定义了一个包含两个全连接层的简单线性模型: ``` import torch.nn as nn class LinearModel(nn.Module): def __init__(self): super(LinearModel, self).__init__() self.fc1 = nn.Linear(784, 100) self.fc2 = nn.Linear(100, 10) def forward(self, x): x = x.view(-1, 784) x = nn.functional.relu(self.fc1(x)) x = self.fc2(x) return x ``` 5. 记录数据:使用writer对象记录数据。可以使用以下代码来记录训练数据: ``` for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): # 定义前向传递 outputs = model(images) # 计算损失 loss = criterion(outputs, labels) # 后向传递和优化器的更新 optimizer.zero_grad() loss.backward() optimizer.step() # 记录损失和准确率 writer.add_scalar('Training/Loss', loss.item(), epoch * len(train_loader) + i) total = labels.size(0) _, predicted = torch.max(outputs.data, 1) correct = (predicted == labels).sum().item() writer.add_scalar('Training/Accuracy', 100 * correct / total, epoch * len(train_loader) + i) ``` 6. 可视化和监控:在运行完上述代码后,可以返回到TensorBoard中,可视化和监视训练过程。输入以下命令,启动TensorBoard服务: ``` tensorboard --logdir=runs ``` 然后,在Web浏览器中,输入http://localhost:6006访问TensorBoard服务器。此时,可以看到图形界面显示了许多模型指标,例如损失和准确率。点击“Scalars”选项卡,就可以查看训练过程中的损失和准确率曲线。 总之,在PyTorch中使用TensorBoard可以方便地监视模型的训练和性能,并且TensorBoard可以提供可视化和交互式工具来帮助调试模型。 ### 回答3: PyTorch是近年来开发迅速的深度学习框架之一,基于Python语言,操作简便易学,广受欢迎。其应用范围广泛,包括图像识别、文本分类、语言模型等多种场景。 TensorBoard是TensorFlow框架提供的可视化工具,能够展现模型训练过程中的各类参数、数据和图形化结果。然而,使用PyTorch的开发者也可以使用TensorBoardPyTorch支持使用TensorBoard进行训练过程可视化。 下面是关于使用TensorBoard来监测PyTorch训练过程的几种方法: 一、使用TensorboardX TensorBoardX是一种基于PyTorch创建的TensorBoard工具,它使用了TensorFlow的tensorboard接口。使用该工具需要对PyTorch进行一些包的安装。 首先安装TensorboardX包: ```python !pip install tensorboardX ``` 然后,创建一个SummaryWriter,监测损失函数、准确率、图像等数据: ```python from tensorboardX import SummaryWriter writer = SummaryWriter("tb_dir") for i in range(100): writer.add_scalar('loss/train', i**2, i) writer.add_scalar('loss/test', 0.7*i**2, i) writer.add_scalar('accuracy/test', 0.9*i, i) writer.add_scalar('accuracy/train', 0.6*i, i) ``` 最后启动TensorBoard,运行 pytorch使用tensorboard的命令行。 ``` tensorboard --logdir tb_dir --host localhost --port 8088 ``` 二、使用PyTorch内置的TensorBoard可视化 pytorch 1.2版本以上,又增加了 PyTorch自带的TensorBoard可视化,PyTorch 内置的与TensorBoard的API兼容,创建SummaryWriter的方法更加简便,而不需要安装多个包。在训练过程中,与使用TensorBoardX类似,将需要监测的数据文件写入到SummaryWriter中: ```python from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter() for i in range(100): writer.add_scalar('loss/train', i**2, i) writer.add_scalar('loss/test', 0.7*i**2, i) writer.add_scalar('accuracy/test', 0.9*i, i) writer.add_scalar('accuracy/train', 0.6*i, i) ``` 运行 tensorboard --logdir , 输入PyTorch写入的文件即可。 三、使用Fastai集成的TensorBoardCallback 除了TensorboardX和PyTorch内置的TensorBoard可视化外,有另外一个可选方案,即使用Fastai中的TensorBoardCallback。Fastai是基于PyTorch的高级深度学习框架,其包含了处理端到端的许多好用工具,包括用于监控训练进程的TensorBoardCallback。下面是使用方法: ```python from fastai.basics import * path = untar_data(URLs.MNIST_SAMPLE) data = ImageDataBunch.from_folder(path) learn = cnn_learner(data, models.resnet18, metrics=accuracy, callback_fns=ShowGraph) learn.fit(5) ``` 设置callback_fns中的ShowGraph即可可视化监测模型的训练过程。 总结 PyTorch是一个强大的深度学习框架,它提供了多种工具监测模型的训练过程。TensorBoard是目前广泛使用的可视化工具之一,使用TensorboardX、PyTorch内置的可视化、Fastai的TensorBoardCallback等方法均可实现PyTorch训练过程的监测和可视化,方便开发者了解模型的训练进程,发现问题并进行调整优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值