Tensorboard

一、什么是Tensorboard

Tensorboard 是一个可视化工具,通常用于机器学习项目中,以帮助用户理解、调试和优化模型。它是 TensorFlow 的一部分,但可以与 PyTorch 一起使用。其主要功能包括:

  • 可视化训练过程:查看模型的损失和准确率随时间变化的曲线。
  • 查看模型图:了解模型的结构和各层之间的关系。
  • 分析数据分布:可视化分布情况,例如权重和偏差的直方图。
  • 文本和图像数据可视化:查看训练时的图片或者文本输出。

简单来说:Tensor可以

  • 显示 loss 函数变化曲线
  • 显示 准确率曲线
  • 展示 模型结构
  • 查看 图片、文本、嵌入向量
  • 分析 直方图、分布图、学习率变化

二、Tensorboarf的使用

使用 Tensorboard 可视化 PyTorch 训练过程

如何使用 Tensorboard 来可视化一个简单的线性模型的训练过程。

  1. 导入相关库

    python 复制代码
    import torch
    from torch import nn, optim
    from torch.utils.tensorboard import SummaryWriter
    • torch 是 PyTorch 的主要库,用于创建和训练模型。
    • nn 包含了各种神经网络层和功能。
    • optim 用于优化算法,例如梯度下降。
    • SummaryWriter 是 Tensorboard 的工具,可以用来记录数据以便后续的可视化。
  2. 定义一个简单的线性模型

    python 复制代码
    class LinearModel(nn.Module):
        def __init__(self):
            super(LinearModel, self).__init__()
            self.linear = nn.Linear(1, 1)
    
        def forward(self, x):
            return self.linear(x)
    • 这里定义了一个简单的线性模型,只有一个线性层。
    • nn.Linear(1, 1) 表示线性层输入和输出都是一个单独的数字。
    • forward 方法定义了数据如何经过模型处理,它将输入的数据通过线性层。
  3. 初始化模型、损失函数和优化器

    python 复制代码
    model = LinearModel()
    criterion = nn.MSELoss()
    optimizer = optim.SGD(model.parameters(), lr=0.01)
    • model 是刚才定义的线性模型。
    • criterion 是损失函数,这里使用均方误差(MSELoss),它用于衡量模型预测值与真实值间的误差。
    • optimizer 使用随机梯度下降(SGD)来更新模型参数,学习率为 0.01
  4. 设置 Tensorboard

    python 复制代码
    writer = SummaryWriter('runs/simple_linear_example')
    • 创建一个 SummaryWriter 实例,它会写入数据到指定目录,这里是 runs/simple_linear_example
  5. 生成简单的数据

    python 复制代码
    x_train = torch.unsqueeze(torch.arange(0., 1., 0.01), dim=1)
    y_train = x_train * 2 + torch.randn(x_train.size()) * 0.1
    • 创建简单的训练数据:x_train 是从 0 到 1 的数,每隔 0.01 取一个数。
    • y_train 是想让模型学习的目标,它是 x 的两倍加上一些随机噪声。
  6. 训练模型并记录损失

    python 复制代码
    for epoch in range(100):
        optimizer.zero_grad()
        predictions = model(x_train)
        loss = criterion(predictions, y_train)
        loss.backward()
        optimizer.step()
    
        writer.add_scalar('Training Loss', loss.item(), epoch)
    • 进行 100 次 epoch 的训练。在每个 epoch:
      • 清除之前的梯度(optimizer.zero_grad())。
      • 计算模型对训练数据的预测值(predictions)。
      • 计算损失,即预测值与真实值之间的差距(loss)。
      • 反向传播以计算梯度(loss.backward())。
      • 根据计算的梯度更新模型的参数(optimizer.step())。
      • 使用 writer.add_scalar 将损失的数值记录到 Tensorboard,以便后续可视化。
  7. 关闭 writer

    python 复制代码
    writer.close()
    • 关闭 SummaryWriter 以确保所有数据都被正确写入。

启动 Tensorboard

在你运行完这段代码后,可以启动 Tensorboard 来查看记录的损失:

ini 复制代码
bash
tensorboard --logdir=runs

在浏览器中访问 http://localhost:6006,将看到一个图表显示训练损失随 epoch 变化,这让你能够直观地观察模型的学习过程。

三、更为简单的例子

1.Tensorboard写日志和读日志

网页截图

2.Tensorboard读图片

python 复制代码
from torch.utils.tensorboard import SummaryWriter
from PIL import Image#PIL是python的图像处理库
import numpy as np

img_path1 = "hymenoptera_data/train/ants/0013035.jpg" 
img_PIL1 = Image.open(img_path1)#打开图片
img_array1 = np.array(img_PIL1)#将图片转换为numpy数组

img_path2 = "hymenoptera_data/train/bees/17209602_fe5a5a746f.jpg" 
img_PIL2 = Image.open(img_path2)
img_array2 = np.array(img_PIL2)

writer = SummaryWriter("logs") 
writer.add_image("test",img_array1,1,dataformats="HWC") 
#test代表log_name,img_array1代表图片,1表示该图片在第1步,dataformats="HWC"表示图片的格式为HWC,H代表高度,W代表宽度,C代表通道数
writer.add_image("test",img_array2,2,dataformats="HWC") 
#test代表log_name,img_array2代表图片,2表示该图片在第2步,dataformats="HWC"表示图片的格式为HWC,H代表高度,W代表宽度,C代表通道数
writer.close()

网页截图:

ps:为了防止logs文件相互影响,可以把不用的日志删除。

相关推荐
wL魔法师20 小时前
【LLM】大模型训练中的稳定性问题
人工智能·pytorch·深度学习·llm
技术小黑1 天前
Transformer系列 | Pytorch复现Transformer
pytorch·深度学习·transformer
DogDaoDao1 天前
神经网络稀疏化设计构架方法和原理深度解析
人工智能·pytorch·深度学习·神经网络·大模型·剪枝·网络稀疏
西猫雷婶1 天前
pytorch基本运算-Python控制流梯度运算
人工智能·pytorch·python·深度学习·神经网络·机器学习
ACEEE12222 天前
Stanford CS336 | Assignment 2 - FlashAttention-v2 Pytorch & Triotn实现
人工智能·pytorch·python·深度学习·机器学习·nlp·transformer
深耕AI2 天前
【PyTorch训练】准确率计算(代码片段拆解)
人工智能·pytorch·python
nuczzz2 天前
pytorch非线性回归
人工智能·pytorch·机器学习·ai
~-~%%2 天前
Moe机制与pytorch实现
人工智能·pytorch·python
Garfield20052 天前
绕过 FlashAttention-2 限制:在 Turing 架构上使用 PyTorch 实现 FlashAttention
pytorch·flashattention·turing·图灵架构·t4·2080ti
深耕AI2 天前
【PyTorch训练】为什么要有 loss.backward() 和 optimizer.step()?
人工智能·pytorch·python