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

使用Python的SummaryWriter()记录模型性能摘要

发布时间:2023-12-19 06:34:08

在深度学习中,模型的性能摘要是非常重要的,能够帮助我们了解模型的表现,并且进行性能对比和调优。TensorBoard是一个强大的可视化工具,可以帮助我们在训练过程中监视和分析模型的性能。在PyTorch中,通过使用SummaryWriter()类,我们可以很方便地将训练日志保存到TensorBoard中,以便后续分析。

首先,我们需要安装TensorBoard和TensorBoardX库。在命令行中运行以下命令进行安装:

pip install tensorboard
pip install tensorboardX

接下来,让我们看一个使用SummaryWriter()来记录模型性能摘要的示例。

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

# 定义网络模型
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

# 加载数据
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=4, shuffle=True, num_workers=2)

# 初始化网络和优化器
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

# 创建SummaryWriter
writer = SummaryWriter()

# 训练
for epoch in range(2):  # 遍历数据集两遍

    running_loss = 0.0
    for i, data in enumerate(trainloader):
        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:    # 每2000个小批次打印一次平均损失
            writer.add_scalar('training loss', running_loss / 2000, epoch * len(trainloader) + i)
            running_loss = 0.0

# 关闭SummaryWriter
writer.close()

在上面的示例中,我们首先定义了一个简单的卷积神经网络模型。然后,我们加载了CIFAR10数据集,并使用SGD优化器来训练网络。在每个batch的训练过程中,我们累积损失值,并使用SummaryWriter()add_scalar()方法将平均损失写入TensorBoard。最后,我们关闭SummaryWriter

在运行上述示例后,在终端中进入项目所在目录,运行以下命令启动TensorBoard:

tensorboard --logdir=runs

然后,在浏览器中打开[http://localhost:6006/](http://localhost:6006/)就可以看到TensorBoard的界面。在Scalars选项卡中,我们可以看到training loss的曲线,以及其他自定义的摘要。通过观察这些摘要的变化,我们可以更好地理解模型的性能表现,并进行调整和优化。

总结:在本文中,我们介绍了如何使用Python的SummaryWriter()记录模型性能摘要。通过TensorBoard的可视化功能,我们可以方便地观察模型的性能变化,并进行优化。这种记录和分析模型性能的方式对于深度学习的研究和实践非常重要。