这篇文章将为大家详细讲解有关Pytorch使用卷积神经网络对CIFAR10图片进行分类方式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
PyTorch 卷积神经网络对 CIFAR-10 图片分类
卷积神经网络(CNN)是一种专门用于处理网格状数据的神经网络,如图像。它利用卷积层提取数据的空间特征,从而有效地捕捉图像中的模式。
CIFAR-10是一个包含 10 类图像的图像数据集,每类有 6000 张图像。它是一个用于图像分类的基准数据集。
PyTorch是一个流行的 Python 深度学习库,提供了构建和训练神经网络的工具和 API。
使用 PyTorch 构建 CNN
以下是使用 PyTorch 构建 CNN 来对 CIFAR-10 数据集进行分类的分步指南:
1. 导入必要的模块和加载数据
首先,需要导入 PyTorch 和 CIFAR-10 数据集。
import torch
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
# 加载 CIFAR-10 训练和测试数据集
train_dataset = datasets.CIFAR10(root="./data", train=True, download=True, transform=transforms.ToTensor())
test_dataset = datasets.CIFAR10(root="./data", train=False, download=True, transform=transforms.ToTensor())
# 创建数据加载器
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
2. 定义模型架构
CNN 通常由一系列卷积层、池化层和全连接层组成。
class CNN(torch.nn.Module):
def __init__(self):
super(CNN, self).__init__()
# 卷积层 1
self.conv1 = torch.nn.Conv2d(3, 6, 3, 1)
# 池化层 1
self.pool1 = torch.nn.MaxPool2d(2, 2)
# 卷积层 2
self.conv2 = torch.nn.Conv2d(6, 16, 3, 1)
# 池化层 2
self.pool2 = torch.nn.MaxPool2d(2, 2)
# 全连接层
self.fc1 = torch.nn.Linear(16 * 5 * 5, 120)
self.fc2 = torch.nn.Linear(120, 84)
self.fc3 = torch.nn.Linear(84, 10)
def forward(self, x):
# 卷积、池化和ReLU激活
x = self.pool1(torch.nn.functional.relu(self.conv1(x)))
x = self.pool2(torch.nn.functional.relu(self.conv2(x)))
# 展平
x = x.view(-1, 16 * 5 * 5)
# 全连接
x = torch.nn.functional.relu(self.fc1(x))
x = torch.nn.functional.relu(self.fc2(x))
x = self.fc3(x)
return x
3. 定义损失函数和优化器
损失函数衡量模型的预测与实际标签之间的差异,优化器用于调整模型的参数以最小化损失。
# 交叉熵损失函数
loss_fn = torch.nn.CrossEntropyLoss()
# 随机梯度下降优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
4. 训练模型
在训练过程中,模型在训练数据上迭代,并通过反向传播更新其参数。
for epoch in range(10):
for i, (inputs, labels) in enumerate(train_loader):
# 前馈和损失计算
outputs = model(inputs)
loss = loss_fn(outputs, labels)
# 反向传播
optimizer.zero_grad()
loss.backward()
# 参数更新
optimizer.step()
5. 评估模型
训练后,模型在测试数据上进行评估以确定其性能。
# 将模型设置为评估模式
model.eval()
# 计算测试准确率
correct = 0
total = 0
with torch.no_grad():
for images, labels in test_loader:
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f"准确率: {(100 * correct / total):.2f}%")
以上就是Pytorch使用卷积神经网络对CIFAR10图片进行分类方式的详细内容,更多请关注编程学习网其它相关文章!