首页 元宇宙

TensorBoard 可视化利器与 torchvision 图像处理实战(深度学习进阶)

分类:元宇宙
字数: (2254)
阅读: (5728)
内容摘要:TensorBoard 可视化利器与 torchvision 图像处理实战(深度学习进阶),

在深度学习模型的训练过程中,我们经常需要监控模型的各种指标,比如损失函数的变化曲线、准确率的变化趋势等等。如果没有好的工具,我们就只能通过打印日志的方式来观察,效率低下且不直观。TensorBoard 正是为了解决这个问题而生的,它能够将训练过程中的各种数据以可视化的方式呈现出来,帮助我们更好地理解模型的训练状态。

本文将深入讲解 TensorBoard 的基础用法,并结合 torchvision 的图像变换工具,展示如何在实际的图像分类任务中使用 TensorBoard 进行可视化。

TensorBoard 安装与基本使用

TensorBoard 是 TensorFlow 官方提供的可视化工具,但它也可以与 PyTorch 等其他深度学习框架配合使用。

首先,我们需要安装 TensorBoard:

TensorBoard 可视化利器与 torchvision 图像处理实战(深度学习进阶)
pip install tensorboard

安装完成后,就可以在代码中使用 torch.utils.tensorboard 模块来记录数据。

一个最简单的示例:

import torch
from torch.utils.tensorboard import SummaryWriter

# 创建 SummaryWriter 对象,指定日志保存路径
writer = SummaryWriter('runs/experiment_1')

# 写入标量数据
for n_iter in range(100):
 writer.add_scalar('Loss/train', torch.randn(1), n_iter)
 writer.add_scalar('Accuracy/train', torch.rand(1), n_iter)

# 关闭 SummaryWriter
writer.close()

运行这段代码后,会在 runs/experiment_1 目录下生成一些日志文件。然后,在命令行中运行以下命令来启动 TensorBoard:

TensorBoard 可视化利器与 torchvision 图像处理实战(深度学习进阶)
tensorboard --logdir runs

打开浏览器,访问 http://localhost:6006,就可以看到 TensorBoard 的界面了。在 SCALARS 标签页中,可以看到我们写入的 Loss 和 Accuracy 的变化曲线。

torchvision 图像变换工具详解

torchvision 是 PyTorch 官方提供的图像处理工具包,其中包含了常用的图像变换方法,可以方便地对图像进行预处理。

常用的图像变换包括:

TensorBoard 可视化利器与 torchvision 图像处理实战(深度学习进阶)
  • transforms.ToTensor(): 将 PIL 图像或 NumPy 数组转换为 Tensor,并将像素值归一化到 [0, 1] 范围。
  • transforms.Normalize(mean, std): 对 Tensor 进行标准化,其中 meanstd 分别是各个通道的均值和标准差。
  • transforms.Resize(size): 调整图像大小。
  • transforms.CenterCrop(size): 从图像中心裁剪出指定大小的区域。
  • transforms.RandomHorizontalFlip(): 以一定的概率对图像进行水平翻转。
  • transforms.RandomVerticalFlip(): 以一定的概率对图像进行垂直翻转。
  • transforms.RandomRotation(degrees): 随机旋转图像,其中 degrees 是旋转角度的范围。

可以将多个变换组合成一个 transforms.Compose 对象,方便地对图像进行流水线式的处理。

import torchvision.transforms as transforms

# 定义图像变换
transform = transforms.Compose([
 transforms.Resize(256),  # 调整大小
 transforms.CenterCrop(224), # 中心裁剪
 transforms.ToTensor(), # 转换为 Tensor
 transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 标准化
])

# 使用变换处理图像 (假设 image 是一个 PIL 图像)
# transformed_image = transform(image)

结合 TensorBoard 与 torchvision 进行图像分类任务可视化

下面,我们以一个简单的图像分类任务为例,展示如何结合 TensorBoard 和 torchvision 来进行可视化。

假设我们使用 CIFAR-10 数据集,并构建一个简单的 CNN 模型。

TensorBoard 可视化利器与 torchvision 图像处理实战(深度学习进阶)
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

# 定义图像变换
transform = transforms.Compose([
 transforms.ToTensor(),
 transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

# 加载 CIFAR-10 数据集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = DataLoader(trainset, batch_size=4, shuffle=True)

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

classes = ('plane', 'car', 'bird', 'cat',
 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

# 定义 CNN 模型
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(torch.relu(self.conv1(x)))
 x = self.pool(torch.relu(self.conv2(x)))
 x = x.view(-1, 16 * 5 * 5)
 x = torch.relu(self.fc1(x))
 x = torch.relu(self.fc2(x))
 x = self.fc3(x)
 return x

net = Net()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

# 创建 SummaryWriter 对象
writer = SummaryWriter('runs/cifar10_experiment')

# 可视化模型结构
images, labels = next(iter(trainloader))
writer.add_graph(net, images)

# 训练模型
for epoch in range(2):  # loop over the dataset multiple times

 running_loss = 0.0
 for i, data in enumerate(trainloader, 0):
 # get the inputs; data is a list of [inputs, labels]
 inputs, labels = data

 # zero the parameter gradients
 optimizer.zero_grad()

 # forward + backward + optimize
 outputs = net(inputs)
 loss = criterion(outputs, labels)
 loss.backward()
 optimizer.step()

 # print statistics
 running_loss += loss.item()
 if i % 2000 == 1999: # print every 2000 mini-batches
 print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 2000:.3f}')
 writer.add_scalar('training loss', running_loss / 2000, epoch * len(trainloader) + i)
 running_loss = 0.0

print('Finished Training')

writer.close()

在上面的代码中,我们首先定义了一个 CNN 模型,并加载了 CIFAR-10 数据集。然后,我们创建了一个 SummaryWriter 对象,并使用 add_graph 方法将模型的结构可视化出来。在训练过程中,我们使用 add_scalar 方法将训练损失记录到 TensorBoard 中。

启动 TensorBoard,可以看到模型的结构图和训练损失的变化曲线,方便我们分析模型的训练情况。

实战避坑经验总结

  • 注意 TensorBoard 的日志目录:确保 TensorBoard 启动时指定的日志目录与代码中 SummaryWriter 对象指定的日志目录一致,否则 TensorBoard 无法读取到数据。
  • 合理设置图像变换:根据实际的任务需求,选择合适的图像变换方法,并调整相应的参数。例如,对于一些需要保留图像细节的任务,不宜过度使用模糊、压缩等变换。
  • 定期清理日志文件:TensorBoard 的日志文件会不断增长,占用磁盘空间。建议定期清理不再需要的日志文件。
  • 数据标准化:在 transforms.Normalize 中使用正确的 meanstd 值,可以使用 ImageNet 的常用值,也可以根据数据集的统计数据进行计算。

掌握了 TensorBoard 的基本使用方法和 torchvision 的图像变换工具,可以帮助我们更好地进行深度学习模型的开发和调试。希望本文对你有所帮助。

TensorBoard 可视化利器与 torchvision 图像处理实战(深度学习进阶)

转载请注明出处: 加班到秃头

本文的链接地址: http://m.acea5.store/blog/133818.SHTML

本文最后 发布于2026-04-16 01:49:45,已经过了11天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 摆烂大师 3 天前
    写得真不错!TensorBoard 的可视化功能确实能帮我快速定位训练问题,省了不少时间。