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


目录
相关文章
|
1天前
|
人工智能 并行计算 PyTorch
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
58 0
|
1天前
|
机器学习/深度学习 文字识别 PyTorch
PyTorch内置损失函数汇总 !!
PyTorch内置损失函数汇总 !!
44 0
|
1天前
|
机器学习/深度学习 存储 PyTorch
【AMP实操】解放你的GPU运行内存!在pytorch中使用自动混合精度训练
【AMP实操】解放你的GPU运行内存!在pytorch中使用自动混合精度训练
77 0
|
1天前
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch基础之模型保存与重载模块、可视化模块讲解(附源码)
PyTorch基础之模型保存与重载模块、可视化模块讲解(附源码)
59 1
|
9月前
|
机器学习/深度学习 数据可视化 PyTorch
【PyTorch】TensorBoard基本使用
【PyTorch】TensorBoard基本使用
143 0
|
6月前
|
数据可视化 PyTorch 算法框架/工具
Pytorch可视化Visdom、tensorboardX和Torchvision
Pytorch可视化Visdom、tensorboardX和Torchvision
44 0
|
1天前
|
数据挖掘 PyTorch 算法框架/工具
人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
182 0
|
1天前
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
19 1
|
8月前
|
人工智能 自然语言处理 PyTorch
NLP信息抽取全解析:从命名实体到事件抽取的PyTorch实战指南
NLP信息抽取全解析:从命名实体到事件抽取的PyTorch实战指南
367 0
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(6):模型的权值初始化与损失函数
Pytorch学习笔记(6):模型的权值初始化与损失函数
120 0
Pytorch学习笔记(6):模型的权值初始化与损失函数