PyTorch 图像分类系统: 使用 ResNet-101 和 ImageNet 数据集
以下是一个使用 PyTorch 框架和 ResNet-101 模型,基于 ImageNet 数据集的图像分类系统示例:
- 导入所需的库和模块:
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
from torchvision.datasets import ImageNet
from torch.utils.data import DataLoader
from torchvision.models import resnet101
- 设置参数和数据预处理:
# 设置参数
num_classes = 1000 # ImageNet 数据集的类别数
batch_size = 32
# 数据预处理
data_transforms = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
- 加载和准备数据集:
# 加载 ImageNet 数据集
train_dataset = ImageNet(root='path/to/train_data', split='train', transform=data_transforms)
val_dataset = ImageNet(root='path/to/val_data', split='val', transform=data_transforms)
# 创建数据加载器
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=batch_size)
确保将 'path/to/train_data' 和 'path/to/val_data' 替换为你实际的训练和验证数据集的路径。
- 定义模型和损失函数:
# 加载预训练的 ResNet-101 模型
model = resnet101(pretrained=True)
# 将最后一层全连接层替换为新的分类器
model.fc = nn.Linear(model.fc.in_features, num_classes)
# 定义损失函数
criterion = nn.CrossEntropyLoss()
- 定义优化器和学习率调度器:
# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
# 定义学习率调度器
lr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=7, gamma=0.1)
- 训练模型:
# 训练模型
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)
num_epochs = 10
for epoch in range(num_epochs):
model.train()
running_loss = 0.0
for images, labels in train_loader:
images = images.to(device)
labels = labels.to(device)
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
epoch_loss = running_loss / len(train_loader)
print(f'Epoch {epoch+1}/{num_epochs}, Loss: {epoch_loss:.4f}')
model.eval()
correct = 0
total = 0
with torch.no_grad():
for images, labels in val_loader:
images = images.to(device)
labels = labels.to(device)
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
val_accuracy = 100 * correct / total
print(f'Validation Accuracy: {val_accuracy:.2f}%')
lr_scheduler.step()
请确保使用合适的计算设备(如GPU)进行训练,同时替换 'path/to/train_data' 和 'path/to/val_data' 为实际的数据集路径。
以上示例提供了一个基于 PyTorch 和 ResNet-101 的图像分类系统的基本框架和训练过程。你可以根据自己的需求进行进一步的定制和修改。
原文地址: https://www.cveoy.top/t/topic/bw5X 著作权归作者所有。请勿转载和采集!