欢迎访问宙启技术站
智能推送

使用TensorboardX进行模型验证结果可视化

发布时间:2024-01-08 08:51:26

TensorboardX是一个用于PyTorch框架的TensorBoard封装库,它可以让用户以TensorBoard的方式可视化训练过程中的模型验证结果。

下面我们以一个分类任务的例子来介绍如何使用TensorboardX进行模型验证结果的可视化。

首先,我们需要导入必要的库和模块:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.tensorboard import SummaryWriter
import tensorboardX

接下来,我们定义一个简单的卷积神经网络模型:

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()

然后,我们定义一些超参数:

batch_size = 4
lr = 0.001
epochs = 10

接着,我们加载CIFAR-10数据集:

transform = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=batch_size,
                                         shuffle=False, num_workers=2)

现在,我们定义优化器和损失函数,并创建一个SummaryWriter对象:

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=lr, momentum=0.9)

writer = SummaryWriter(log_dir='logs')

接下来,我们进行模型的训练和验证,并使用SummaryWriter记录验证结果:

for epoch in range(epochs):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data

        optimizer.zero_grad()

        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:
            writer.add_scalar('training_loss',
                            running_loss / 2000,
                            epoch * len(trainloader) + i)
            running_loss = 0.0

    # 每个epoch结束后进行模型验证,并使用SummaryWriter记录验证正确率
    correct = 0
    total = 0
    with torch.no_grad():
        for data in testloader:
            images, labels = data
            outputs = net(images)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()

    writer.add_scalar('validation_accuracy',
                      100 * correct / total,
                      epoch + 1, True)

最后,记得在训练结束后关闭SummaryWriter:

writer.close()

运行上述代码后,TensorboardX将在logs目录下生成一个events文件,我们可以使用tensorboard命令来启动TensorBoard并查看可视化结果:

tensorboard --logdir=logs

通过访问http://localhost:6006,在TensorBoard界面中可以查看到训练过程中的损失函数变化图和模型验证正确率变化图。

综上所述,TensorboardX提供了简单易用的接口来可视化模型训练过程中的各种结果,使得我们可以更方便地分析和调试模型。