【pytorch记录】SummaryWriter保存日志

文章介绍了在PyTorch框架内如何利用TensorBoard库进行日志管理,包括保存标量数据、图片、直方图以及网络结构。通过SummaryWriter类,可以添加Scalar、Image、Histogram等信息,并通过tensorboard命令查看可视化结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在pytorch框架中,关于日志的保存,其中一种方式就是借鉴使用了tensorboard的库。所以我们需要在环境中安装tensorboard库,然后再在工程中进行该库的调用

1 安装与导入

  • 安装:conda install tensorboardX 或者 pip install tensorboardX
  • 导入
     from tensorboardX import SummaryWriter
     writer = SummaryWriter(logPath)
     ...
     writer.close()
    

2 添加需要保存标量数据

在这里插入图片描述

  • add_scalar(tag, scalar_value, global_step=None) 从源码中我们能看到核心的三个参数为前三个。通俗的讲分别代表
    • tag:图的标签名,唯一标识
      scalar_value:y轴数据,标量数据的具体数值
      global_step:x轴数据,要记录的全局步长值
  • add_scalars(main_tag, tag_scalar_dit)多项标题记录方法,其中:
    • main_tag —— 该图的标签
      tag_salar_dict —— 字典形式的tag-scalar_value对

源码中也有例子:

from tensorboardX import SummaryWriter
import numpy as np

writer = SummaryWriter('run/logs')

max_epoch = 100
for x in range(max_epoch):

    writer.add_scalar('t/y=2x', x * 2, x)    #x*2为y轴数据,x为x轴数据
    writer.add_scalar('t/y=pow_2_x', 2^x, x)
    writer.add_scalars('scalar_group', {"xsinx": x * np.sin(x),
                                     "xcosx": x * np.cos(x)}, x)
    writer.close()


运行完该脚本后,运行tensorboard命令:tensorboard --logdir=./run/
在这里插入图片描述
在浏览器中打开链接:【http://localhost:6006/】
在这里插入图片描述

3 添加需要保存图片数据

在这里插入图片描述
从源码中我们能看到add_image的主要参数如下。通俗的讲分别代表

  • tag:曲线图名字,唯一标识
  • img_tensor:图片数据,类型要求为 tensor/numpy/string 等
  • global_step:要记录的全局步长值
  • dataformats:图片输入的默认维度。注意是"CHW"
from tensorboardX import SummaryWriter
import numpy as np
img = np.zeros((3, 100, 100))
img[0] = np.arange(0, 10000).reshape(100, 100) / 10000
img[1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000

img_HWC = np.zeros((100, 100, 3))
img_HWC[:, :, 0] = np.arange(0, 10000).reshape(100, 100) / 10000
img_HWC[:, :, 1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000

writer = SummaryWriter('run/logs')
writer.add_image('my_image', img, 0)

# If you have non-default dimension setting, set the dataformats argument.
writer.add_image('my_image_HWC', img_HWC, 0, dataformats='HWC')
writer.close()

在这里插入图片描述

4 直方图的记录

画直方图主要为了看参数的分布状态,使用add_histogram(tag, values, global_step=None, bins=’tensorflow’, walltime=None),其中tag, value, global_step的含义同上,示例如下:

# 每个epoch,记录梯度,权值
for name, param in net.named_parameters():
    writer.add_histogram(name + '_grad', param.grad, epoch)
    writer.add_histogram(name + '_data', param, epoch)

5 网络结构的记录

展示结构图使用add_graph(model, input_to_model=None, verbose=False)

writer = SummaryWriter(comment='test_your_comment', filename_suffix="_test_your_filename_suffix")
# 模型
fake_img = torch.randn(1, 3, 32, 32)
yolo = Yolo(classes=2)
writer.add_graph(yolo, fake_img)
writer.close()
PyTorch中,我们可以使用Python自带的logging模块来保存模型训练过程的日志信息。首先,我们需要导入logging模块: ```python import logging ``` 然后,设置日志的级别以及日志的格式: ```python # 设置日志级别为INFO logging.basicConfig(level=logging.INFO) # 设置日志的格式 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') ``` 接下来,我们可以创建一个logger对象,并设置其相关属性,比如日志级别和格式: ```python # 创建logger对象 logger = logging.getLogger() # 设置日志级别为INFO logger.setLevel(logging.INFO) # 创建一个文件日志处理器,并将日志写入指定文件中 file_handler = logging.FileHandler('log.txt') file_handler.setLevel(logging.INFO) file_handler.setFormatter(formatter) # 创建一个控制台日志处理器,并将日志打印在控制台上 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) console_handler.setFormatter(formatter) # 将文件日志处理器和控制台日志处理器添加到logger对象中 logger.addHandler(file_handler) logger.addHandler(console_handler) ``` 最后,在模型训练的迭代过程中,我们可以使用logger对象来保存训练过程的日志信息: ```python # 模型训练过程中的日志信息 for epoch in range(num_epochs): # 模型训练代码 # ... # 保存日志信息 logger.info(f'Epoch: {epoch}') # 模型评估代码 # ... # 保存日志信息 logger.info(f'Evaluation: {evaluation_result}') ``` 这样,模型训练过程中的日志信息就会被保存在'log.txt'文件中,并且也会在控制台上进行打印。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值