PyTorch CIFAR-10 图像分类教程:使用 GPU 和 ResNet
使用 GPU 和 ResNet 训练 CIFAR-10 的 PyTorch 代码示例
本教程提供了一个使用 PyTorch 框架,结合 GPU 和 ResNet 模型训练 CIFAR-10 数据集进行图像分类的完整代码示例。pythonimport torchimport torch.nn as nnimport torch.optim as optimimport torchvisionimport torchvision.transforms as transforms
检查GPU是否可用device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
加载和预处理CIFAR-10数据集transform = transforms.Compose( [transforms.RandomHorizontalFlip(), transforms.RandomCrop(32, padding=4), 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=128, shuffle=True, num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)testloader = torch.utils.data.DataLoader(testset, batch_size=128, shuffle=False, num_workers=2)
定义ResNet模型class ResNet(nn.Module): def init(self): super(ResNet, self).init() # 定义ResNet模型结构 # ... 此处添加 ResNet 模型结构定义
def forward(self, x): # 前向传播逻辑 # ... 此处添加 ResNet 模型前向传播逻辑
model = ResNet().to(device)
定义损失函数和优化器criterion = nn.CrossEntropyLoss()optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9, weight_decay=5e-4)
学习率调整策略scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=200)
训练模型def train(epoch): model.train() train_loss = 0 correct = 0 total = 0 for batch_idx, (inputs, targets) in enumerate(trainloader): inputs, targets = inputs.to(device), targets.to(device) optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, targets) loss.backward() optimizer.step()
train_loss += loss.item() _, predicted = outputs.max(1) total += targets.size(0) correct += predicted.eq(targets).sum().item()
print('Epoch: %d, Train Loss: %.3f, Train Acc: %.3f%%' % ( epoch, train_loss / (batch_idx + 1), 100. * correct / total))
def test(epoch): model.eval() test_loss = 0 correct = 0 total = 0 with torch.no_grad(): for batch_idx, (inputs, targets) in enumerate(testloader): inputs, targets = inputs.to(device), targets.to(device) outputs = model(inputs) loss = criterion(outputs, targets)
test_loss += loss.item() _, predicted = outputs.max(1) total += targets.size(0) correct += predicted.eq(targets).sum().item()
print('Epoch: %d, Test Loss: %.3f, Test Acc: %.3f%%' % ( epoch, test_loss / (batch_idx + 1), 100. * correct / total))
进行训练和测试for epoch in range(200): train(epoch) test(epoch) scheduler.step()
print('Finished Training')
代码说明:
- 导入必要的库: 导入
torch,torchvision等库,用于处理张量、构建模型、加载数据等操作。2. 检查 GPU: 检查 GPU 是否可用,并将设备设置为 GPU 或 CPU。3. 加载和预处理 CIFAR-10 数据集: 使用torchvision.datasets.CIFAR10加载 CIFAR-10 数据集,并使用torchvision.transforms进行数据增强和预处理,例如随机水平翻转、随机裁剪、转换为张量、标准化等操作。4. 定义 ResNet 模型: 定义 ResNet 模型结构,包括卷积层、池化层、全连接层等。你可以根据需要选择不同的 ResNet 变体,例如 ResNet18、ResNet34、ResNet50 等。5. 定义损失函数和优化器: 选择合适的损失函数,例如交叉熵损失函数,并选择优化器,例如 SGD 或 Adam。6. 定义学习率调整策略: 使用学习率调整策略,例如 CosineAnnealingLR,可以帮助模型更好地收敛。7. 训练模型: 编写训练循环,迭代训练数据,计算损失函数,反向传播梯度,更新模型参数。8. 测试模型: 编写测试循环,使用测试数据评估模型性能,例如计算准确率。
注意:
- 在运行代码之前,请确保已安装 PyTorch 和相应的依赖项。* 你需要根据选择的 ResNet 变体,补充模型结构定义和前向传播逻辑的代码。
希望这个代码示例可以帮助你开始使用 PyTorch 训练 CIFAR-10 图像分类模型
原文地址: https://www.cveoy.top/t/topic/bE6V 著作权归作者所有。请勿转载和采集!