CIFAR10-Pytorch-94.1%

该博客详细介绍了如何使用PyTorch训练模型,在CIFAR10数据集上达到了94.1%的测试准确率。内容包括`train.py`中的训练过程,`test.py`中的验证和测试步骤,以及`cifar10.py`中数据预处理和模型定义的代码实现。
摘要由CSDN通过智能技术生成

train.py:

# -*- coding: utf-8 -*-
import torch
import torch.nn as nn
import numpy as np
from torchvision import models
import torchvision.transforms as transforms
from cifar10 import CIFAR10

# define network
def genNet():
    net=models.resnet34(pretrained=True) # pretrained
    net.conv1=nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False) #(b,64,32,32)
    net.bn1=nn.BatchNorm2d(64)
    net.maxpool=nn.MaxPool2d(kernel_size=1, stride=1)
    net.avgpool=nn.AvgPool2d(4, stride=1) #32/8
    expansion=1 #18,34 : expansion=1 else 4
    net.fc=nn.Linear(512 * expansion, 10) #
    return net

# define parameters
torch.cuda.set_device(0)
gpu_en=True
load=True
save=True
num_epochs=1
nbatch=150
lr=0.001

# define transform
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))
])

# define dataset
dataset=CIFAR10('D:\\dataset\\cifar10', train=True, transform=transform)

# run
net=genNet()
if load:
    net.load_state_dict(torch.load('net.pkl'))
if gpu_en:
    net=net.cuda()
loader=torch.utils.data.DataLoader(dataset, batch_size=nbatch, shuffle=True, num_workers=0)
criterion=nn.CrossEntropyLoss()
optimizer=torch.o
好的,我来为您介绍如何在PyTorch中使用AlexNet对CIFAR-10数据集进行训练。以下是基于PyTorch的代码示例: 首先,我们需要加载CIFAR-10数据集。PyTorch提供了内置的方法来加载和预处理数据集: ```python import torch import torchvision import torchvision.transforms as transforms # 定义数据预处理 transform = transforms.Compose( [transforms.Resize((227, 227)), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) # 加载CIFAR-10数据集 trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, 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=64, shuffle=False, num_workers=2) ``` 接下来,我们需要定义AlexNet模型并进行微调。在这里,我们将最后一层的输出从1000个类别更改为10个类别,以适应CIFAR-10数据集的分类任务: ```python import torch.nn as nn import torch.optim as optim from torchvision.models import alexnet # 加载预训练的AlexNet模型 model = alexnet(pretrained=True) # 将最后一层的输出从1000个类别更改为10个类别 num_features = model.classifier[6].in_features model.classifier[6] = nn.Linear(num_features, 10) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) ``` 最后,我们可以使用反向传播算法和随机梯度下降算法来训练这个模型: ```python # 训练模型 for epoch in range(10): # 遍历数据集10次 running_loss = 0.0 for i, data in enumerate(trainloader, 0): # 获取输入并将其送入模型中 inputs, labels = data optimizer.zero_grad() outputs = model(inputs) # 计算损失并执行反向传播 loss = criterion(outputs, labels) loss.backward() optimizer.step() # 打印统计信息 running_loss += loss.item() if i % 200 == 199: # 每200个batch打印一次 print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 200)) running_loss = 0.0 print('Finished Training') ``` 最后,我们可以使用测试集来测试训练出的模型的性能: ```python # 在测试集上测试模型 correct = 0 total = 0 with torch.no_grad(): for data in testloader: images, labels = data outputs = model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print('Accuracy of the network on the 10000 test images: %d %%' % ( 100 * correct / total)) ``` 希望这能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值