深度学习——TensorBoard的使用

官方文档torch.utils.tensorboard --- PyTorch 2.3 documentation

TensorBoard简介

TensorBoard是一个可视化工具,它可以用来展示网络图、张量的指标变化、张量的分布情况等。特别是在训练网络的时候,我们可以设置不同的参数(比如:权重W、偏置B、卷积层数、全连接层数等),使用TensorBoader可以很直观的帮我们进行参数的选择。它通过运行一个本地服务器,来监听6006端口。在浏览器发出请求时,分析训练时记录的数据,绘制训练过程中的图像。

TensorBoard 是Google开发的一个机器学习可视化工具。其主要用于记录机器学习过程,例如:

  • 记录损失变化、准确率变化
  • 记录图片变化、语音变化、文本变化等,例如在做GAN时,可以过一段时间记录一张生成的图片
  • 绘制模型

TensorBoard下载

python 复制代码
 pip install tensorboard -i https://pypi.tuna.tsinghua.edu.cn/simple

TensorBoard的使用

Pytorch使用Tensorboard主要用到了三个API:

SummaryWriter: 这个用来创建一个log文件,TensorBoard面板查看时,也是需要选择查看那个log文件。
add_something: 向log文件里面增添数据。例如可以通过add_scalar增添折线图数据,add_image可以增添图片。
**close:**当训练结束后,我们可以通过close方法结束log写入。

接下来,我们来模拟记录训练过程中准确率的变化。

首先需要new一个SummaryWriter对象:

python 复制代码
from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter('logs')

当运行完该行代码后,可以看到当前目录下生成了一个logs文件夹,并且里面有event日志

此时已经可以在终端启动tensorboard来查看了:

python 复制代码
 tensorboard --logdir=logs --port=6007

SummaryWriter中一些子类函数的使用

1.add_scalar():添加标量到SummaryWriter中

(1)参数详解

  • tag(string): Data的指定方式,图表的标题

  • scalar(float or string/blobname): 需要存储的数值

  • global_step(int): 训练的步数(Global step value to record),结合scalar,那就是训练到多少步的时候scalar的数值是多少。

  • walltime(float): (不常用参数,可选)Optional override default walltime(time.time()) with seconds after epoch of event

更直观的参数解释,可以表示为下图的方式:

(2)代码

python 复制代码
from torch.utils.tensorboard import SummaryWriter

writer=SummaryWriter("logs")  #将事件文件存储到logs这个文件夹底下

#绘制一个y=2x的图像
for i in range(100):
    writer.add_scalar("y=x",2*i,i)  # writer.add_scalar(图像标题,y轴,x轴)
writer.close()

2.add_image():添加image到SummaryWriter

(1)参数详解

  • tag(string): Data的指定方式,图表的标题

  • img_tensor(torch.Tensor, numpy.array, or string/blobname): 图像数据

  • global_step(int): 训练的步数(Global step value to record),结合img_tensor,那就是训练到多少步的时候img_tensor的图像是什么。

  • walltime(float): (不常用参数,可选)Optional override default walltime(time.time()) with seconds after epoch of event

默认输入图像数据形状:

  • (3, H, W):三通道,高,宽

  • 注意:如果输入数据为 (H, W, 3) 也是可以的,但是需要设置dataformats,如dataformats='HWC'

(2)代码

python 复制代码
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image

writer = SummaryWriter('logs')
image_path = 'img_data/train/ants_image/5650366_e22b7e1065.jpg'
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)

print(type(img_array))
print(img_array.shape)
writer.add_image('test', img_array,2, dataformats="HWC")

writer.close()

3.add_images():添加image到SummaryWriter

python 复制代码
add_images(tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW')

参数**:**

  • tag (string) -数据标识符

  • img_tensor (torch.Tensor, numpy.array , 或者 字符串/blob 名称) -图像数据

  • global_step (int) -要记录的全局步长 值

  • walltime (float) -事件纪元后的可选覆盖默认 walltime (time.time()) 秒

  • dataformats (string) -NCHW、NHWC、CHW、HWC、HW、WH等形式的图像数据格式规范。

将批量图像数据添加到摘要中。

请注意,这需要pillow 包。

形状:

img_tensor:默认为(N,3,W,H) 。如果指定dataformats,则接受其他形状。例如NCHW 或 NHWC。

python 复制代码
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

# 准备的测试数据集
test_data = torchvision.datasets.CIFAR10(root='./dataset', train=False, transform=torchvision.transforms.ToTensor())

test_loader =DataLoader(dataset=test_data, batch_size=64, shuffle=False, num_workers=0, drop_last=True)
# shuffle 是否打乱   False不打乱
# drop_last 最后一轮数据不够时,是否舍弃 true舍弃

#img, target = test_loader[0] TypeError: 'DataLoader' object is not subscriptable
img, target = test_data[0]
print(img.shape)
print(target)

writer = SummaryWriter('dataloader')

for epoch in range(2):
    step = 0
    for data in test_loader:
        imgs, targets = data
        # print(imgs.shape)
        # print(targets)
        writer.add_images('Epoch:{}'.format(epoch),imgs,step)
        step = step+1

writer.close()

参考

TensorBoard快速入门(Pytorch使用TensorBoard)-CSDN博客

深度学习(二)------TensorBoard的使用 - 码头牛牛 - 博客园 (cnblogs.com)

Pytorch学习笔记之tensorboard - 奥辰 - 博客园 (cnblogs.com)

Python PyTorch SummaryWriter.add_images用法及代码示例 - 纯净天空 (vimsky.com)

相关推荐
余弦的倒数13 分钟前
知识蒸馏和迁移学习的区别
人工智能·机器学习·迁移学习
Allen Bright13 分钟前
【机器学习-线性回归-2】理解线性回归中的连续值与离散值
人工智能·机器学习·线性回归
青松@FasterAI1 小时前
【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)
人工智能·自然语言处理
AIGC大时代1 小时前
高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
数据库·人工智能·算法·aigc·智能写作·deepseek
硅谷秋水1 小时前
GAIA-2:用于自动驾驶的可控多视图生成世界模型
人工智能·机器学习·自动驾驶
多巴胺与内啡肽.1 小时前
深度学习--自然语言处理统计语言与神经语言模型
深度学习·语言模型·自然语言处理
偶尔微微一笑1 小时前
AI网络渗透kali应用(gptshell)
linux·人工智能·python·自然语言处理·编辑器
深度之眼2 小时前
2025时间序列都有哪些创新点可做——总结篇
人工智能·深度学习·机器学习·时间序列
晓数2 小时前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
jndingxin2 小时前
OpenCV 图形API(60)颜色空间转换-----将图像从 YUV 色彩空间转换为 RGB 色彩空间函数YUV2RGB()
人工智能·opencv·计算机视觉