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文件相互影响,可以把不用的日志删除。

相关推荐
wow_DG5 小时前
【Pytorch✨】LSTM01 入门
人工智能·pytorch·lstm
旧时光巷9 小时前
【深度学习②】| DNN篇
人工智能·pytorch·深度学习·dnn·模型训练·手写数字识别·深度神经网络
一碗白开水一10 小时前
【模型细节】FPN经典网络模型 (Feature Pyramid Networks)详解及其变形优化
网络·人工智能·pytorch·深度学习·计算机视觉
爱分享的飘哥19 小时前
第三十七章:文生图的炼金术:Stable Diffusion完整工作流深度解析
人工智能·pytorch·stable diffusion·文生图·ai绘画·代码实战·cfg
wow_DG2 天前
【PyTorch✨】01 初识PyTorch
人工智能·pytorch·python
我不是小upper2 天前
anaconda、conda、pip、pytorch、torch、tensorflow到底是什么?它们之间有何联系与区别?
人工智能·pytorch·深度学习·conda·tensorflow·pip
TT-Kun2 天前
PyTorch基础——张量计算
人工智能·pytorch·python
wydxry2 天前
MOE架构详解:原理、应用与PyTorch实现
人工智能·pytorch·架构
天才少女爱迪生2 天前
pytorch的自定义 CUDA 扩展怎么学习
人工智能·pytorch·学习