使用 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')

代码说明:

  1. 导入必要的库: 导入 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 图像分类模型

PyTorch CIFAR-10 图像分类教程:使用 GPU 和 ResNet

原文地址: https://www.cveoy.top/t/topic/bE6V 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录