pytorch使用TensorBoard可视化损失函数曲线、精度信息

简介: pytorch使用TensorBoard可视化损失函数曲线、精度信息

在训练神经网络时,我们希望能够直观地训练情况,例如损失函数的曲线输入的图像模型精度等信息,这些信息可以帮助我们更好地监督网络的训练过程,并为参数优化提供方向和依据。

其实我们可以有个更容易地实现方式就是定义一个列表,然后将每个epoch的训练结果添加到列表中,待模型训练完成之后,使用这个列表中的数据进行可视化以及绘图操作等。

本文提供一个更为专业的操作,它是一个常用的可视化工具:TensorBoard

PyTorch已经内置了TensorBoard的相关接口,用户在安装后便可调用相关接口进行数据可视化

下面我将使用LeNet训练MNIST为例,来讲解tensorboard如何使用。

加载数据

import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms as T
from tqdm import tqdm
data_transform = T.Compose([
        T.RandomResizedCrop(32),
        T.ToTensor(),
])
train_dataset = torchvision.datasets.MNIST('./', train=True, transform=data_transform)
val_dataset = torchvision.datasets.MNIST('./', train=False, transform=data_transform)
train_loader = torch.utils.data.DataLoader(train_dataset, 32)
val_loader = torch.utils.data.DataLoader(val_dataset, 32)

定义网络

class LeNet5(nn.Module):
    def __init__(self,num_class=10):
        super(LeNet5,self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.pool1 = nn.AvgPool2d((2, 2))
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.pool2 = nn.AvgPool2d((2, 2))
        self.conv3 = nn.Conv2d(16, 120, 5)
        self.relu = nn.ReLU()
        self.fc1 = nn.Linear(120, 84)
        self.fc2 = nn.Linear(84, num_class)
    def forward(self, x):
        # x: torch.Size([1, 3, 32, 32])
        x = self.conv1(x) # torch.Size([1, 6, 28, 28])
        x = self.relu(x)
        x = self.pool1(x) # torch.Size([1, 6, 14, 14])
        x = self.conv2(x) # torch.Size([1, 16, 10, 10])
        x = self.relu(x)
        x = self.pool2(x) # torch.Size([1, 16, 5, 5])
        x = self.conv3(x) # torch.Size([1, 120, 1, 1])
        x = self.relu(x)
        x = x.flatten(start_dim=1) # torch.Size([1, 120])
        x = self.fc1(x) # torch.Size([1, 84])
        x = self.relu(x)
        x = self.fc2(x) # torch.Size([1, 5])
        return x

定义模型等组件

model = LeNet5(10)
loss_function = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), 0.003)
# 日志信息保存路径
logger = SummaryWriter(log_dir='./log')

模型训练

for epoch in range(50):
    train_accuracy = 0
    train_loss = 0
    val_accuracy = 0
    val_loss = 0
    epoch_acc_count = 0
    count = 0
    running_loss = 0
    model.train()
    for data in tqdm(train_loader):
        images, labels = data
        optimizer.zero_grad()
        output = model(images)
        loss = loss_function(output, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        # 计算每个epoch正确的个数
        epoch_acc_count += (output.argmax(axis=1) == labels.view(-1)).sum()
        count += len(images)
    # 写入日志信息
    logger.add_scalar('train_loss', running_loss, epoch + 1)
    logger.add_scalar('train_accuracy', epoch_acc_count / count, epoch + 1)
    running_loss = 0
    epoch_acc_count = 0
    count = 0
    model.eval()
    for data in tqdm(val_loader):
        images, labels = data
        optimizer.zero_grad()
        output = model(images)
        loss = loss_function(output, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        # 计算每个epoch正确的个数
        epoch_acc_count += (output.argmax(axis=1) == labels.view(-1)).sum()
        count += len(images)
    logger.add_scalar('val_loss', running_loss, epoch + 1)
    logger.add_scalar('val_accuracy', epoch_acc_count / count, epoch + 1)

命令启动TensorBoard

通过下面的命令行参数即可启动tensorboard,log_path就是我们模型训练时日志保存的路径。

tensorboard --logdir=log_path


目录
相关文章
|
人工智能 并行计算 PyTorch
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
1107 0
|
10月前
|
机器学习/深度学习 JavaScript PyTorch
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
生成对抗网络(GAN)的训练效果高度依赖于损失函数的选择。本文介绍了经典GAN损失函数理论,并用PyTorch实现多种变体,包括原始GAN、LS-GAN、WGAN及WGAN-GP等。通过分析其原理与优劣,如LS-GAN提升训练稳定性、WGAN-GP改善图像质量,展示了不同场景下损失函数的设计思路。代码实现覆盖生成器与判别器的核心逻辑,为实际应用提供了重要参考。未来可探索组合优化与自适应设计以提升性能。
917 7
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
|
3月前
|
边缘计算 人工智能 PyTorch
130_知识蒸馏技术:温度参数与损失函数设计 - 教师-学生模型的优化策略与PyTorch实现
随着大型语言模型(LLM)的规模不断增长,部署这些模型面临着巨大的计算和资源挑战。以DeepSeek-R1为例,其671B参数的规模即使经过INT4量化后,仍需要至少6张高端GPU才能运行,这对于大多数中小型企业和研究机构来说成本过高。知识蒸馏作为一种有效的模型压缩技术,通过将大型教师模型的知识迁移到小型学生模型中,在显著降低模型复杂度的同时保留核心性能,成为解决这一问题的关键技术之一。
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
2625 2
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
3480 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
机器学习/深度学习
小土堆-pytorch-神经网络-损失函数与反向传播_笔记
在使用损失函数时,关键在于匹配输入和输出形状。例如,在L1Loss中,输入形状中的N代表批量大小。以下是具体示例:对于相同形状的输入和目标张量,L1Loss默认计算差值并求平均;此外,均方误差(MSE)也是常用损失函数。实战中,损失函数用于计算模型输出与真实标签间的差距,并通过反向传播更新模型参数。
290 7
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
591 1
|
数据可视化 计算机视觉 异构计算
确保您已经安装了必要的库,包括`torch`、`torchvision`、`segmentation_models_pytorch`、`PIL`(用于图像处理)和`matplotlib`(用于结果可视化)。您可以使用pip来安装这些库:
确保您已经安装了必要的库,包括`torch`、`torchvision`、`segmentation_models_pytorch`、`PIL`(用于图像处理)和`matplotlib`(用于结果可视化)。您可以使用pip来安装这些库:
|
数据可视化 PyTorch TensorFlow
PyTorch SummaryWriter TensorBoard 中进行可视化
PyTorch SummaryWriter TensorBoard 中进行可视化
874 0
|
机器学习/深度学习 监控 PyTorch
PyTorch模型训练:优化器与损失函数的选择
【4月更文挑战第17天】PyTorch中的优化器(如SGD, Adam, RMSprop)和损失函数(如MSE Loss, Cross Entropy Loss)对模型训练效果有显著影响。优化器选择应基于任务复杂度和数据规模,SGD适合简单任务,而Adam和RMSprop适用于复杂情况。损失函数选择依赖于任务类型,MSE Loss用于回归,Cross Entropy Loss用于分类。实践中,应尝试不同组合,调整学习率,监控训练过程,并使用验证集优化模型。

推荐镜像

更多