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


目录
相关文章
|
6月前
|
人工智能 并行计算 PyTorch
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
327 0
|
6月前
|
机器学习/深度学习 文字识别 PyTorch
PyTorch内置损失函数汇总 !!
PyTorch内置损失函数汇总 !!
93 0
|
6月前
|
机器学习/深度学习 存储 PyTorch
【AMP实操】解放你的GPU运行内存!在pytorch中使用自动混合精度训练
【AMP实操】解放你的GPU运行内存!在pytorch中使用自动混合精度训练
236 0
|
23天前
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
102 2
|
22天前
|
机器学习/深度学习 算法 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实现代码。
105 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
2月前
|
机器学习/深度学习
小土堆-pytorch-神经网络-损失函数与反向传播_笔记
在使用损失函数时,关键在于匹配输入和输出形状。例如,在L1Loss中,输入形状中的N代表批量大小。以下是具体示例:对于相同形状的输入和目标张量,L1Loss默认计算差值并求平均;此外,均方误差(MSE)也是常用损失函数。实战中,损失函数用于计算模型输出与真实标签间的差距,并通过反向传播更新模型参数。
|
4月前
|
数据可视化 计算机视觉 异构计算
确保您已经安装了必要的库,包括`torch`、`torchvision`、`segmentation_models_pytorch`、`PIL`(用于图像处理)和`matplotlib`(用于结果可视化)。您可以使用pip来安装这些库:
确保您已经安装了必要的库,包括`torch`、`torchvision`、`segmentation_models_pytorch`、`PIL`(用于图像处理)和`matplotlib`(用于结果可视化)。您可以使用pip来安装这些库:
|
4月前
|
数据可视化 PyTorch TensorFlow
PyTorch SummaryWriter TensorBoard 中进行可视化
PyTorch SummaryWriter TensorBoard 中进行可视化
|
6月前
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
107 1
|
6月前
|
机器学习/深度学习 监控 PyTorch
PyTorch模型训练:优化器与损失函数的选择
【4月更文挑战第17天】PyTorch中的优化器(如SGD, Adam, RMSprop)和损失函数(如MSE Loss, Cross Entropy Loss)对模型训练效果有显著影响。优化器选择应基于任务复杂度和数据规模,SGD适合简单任务,而Adam和RMSprop适用于复杂情况。损失函数选择依赖于任务类型,MSE Loss用于回归,Cross Entropy Loss用于分类。实践中,应尝试不同组合,调整学习率,监控训练过程,并使用验证集优化模型。