PyTorch 数据增强网络训练示例 - 基于 CIFAR10 和 ResNet-18
以下是基于增强数据的 PyTorch 网络训练代码示例:
import torch
import torch.nn as nn
import torchvision.transforms as transforms
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision.datasets import CIFAR10
from torchvision.models import resnet18
# 定义数据增强
train_transform = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
# 加载 CIFAR10 数据集
train_dataset = CIFAR10(root='./data', train=True, download=True, transform=train_transform)
train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=4)
# 定义 ResNet-18 网络
net = resnet18(num_classes=10)
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
# 将模型放到 GPU 设备上进行训练
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
net.to(device)
# 开始训练
for epoch in range(10):
running_loss = 0.0
for i, data in enumerate(train_loader, 0):
# 获取输入数据和标签
inputs, labels = data
inputs, labels = inputs.to(device), labels.to(device)
# 将梯度清零
optimizer.zero_grad()
# 正向传播
outputs = net(inputs)
loss = criterion(outputs, labels)
# 反向传播和优化
loss.backward()
optimizer.step()
# 打印训练状态
running_loss += loss.item()
if i % 100 == 99:
print('[%d, %5d] loss: %.3f' %
(epoch + 1, i + 1, running_loss / 100))
running_loss = 0.0
print('Finished Training')
在本示例代码中,我们使用了 PyTorch 自带的数据增强函数,例如 RandomCrop 和 RandomHorizontalFlip 等,对输入数据进行增强。我们还使用了 ResNet-18 作为我们的网络模型,并使用了 SGD 优化器进行优化。最后,我们将模型放到 GPU 设备上进行训练。在训练过程中,我们会打印出每个 epoch 的损失值,以便我们检查训练状态。
数据增强
数据增强是指通过对训练数据进行一些变换,来增加训练数据的数量和多样性,从而提高模型的泛化能力。常用的数据增强方法包括:
- 随机裁剪:从原始图像中随机裁剪出不同大小和位置的区域,并将其作为新的样本。
- 随机水平翻转:以一定概率将图像水平翻转。
- 随机旋转:以一定角度随机旋转图像。
- 色彩抖动:对图像的亮度、对比度、饱和度等进行随机调整。
ResNet-18 网络
ResNet-18 是一个常用的卷积神经网络,它包含 18 个卷积层。ResNet-18 具有良好的性能和较低的计算量,常用于图像分类任务。
SGD 优化器
SGD 优化器是一种常用的梯度下降算法,它通过迭代地更新模型参数来最小化损失函数。
GPU 训练
GPU 可以提供更快的计算速度,因此将模型放到 GPU 设备上进行训练可以显著缩短训练时间。
性能评估
在训练完成后,我们需要对模型进行性能评估,以了解模型的泛化能力。常用的性能评估指标包括:
- 准确率:分类正确的样本数量占总样本数量的比例。
- 召回率:正确分类的正样本数量占所有正样本数量的比例。
- F1 分数:准确率和召回率的调和平均值。
通过上述代码示例,您可以了解如何使用 PyTorch 训练一个基于 ResNet-18 模型的图像分类网络,并使用数据增强技术提升模型性能。
原文地址: https://www.cveoy.top/t/topic/nbgr 著作权归作者所有。请勿转载和采集!