Cifar-10分类

步骤

  • 使用Torchvision加载并预处理CIFAR-10数据集
  • 定义网络
  • 定义损失函数和优化器
  • 训练网络并更新网络参数
  • 测试网络

Cifar-10数据加载及预处理

Cifar-10是一个常用的彩色图片数据集,它有10个类别的图片,分别是airplane、automobile、bird、cat、deer、dog、frog、horse、ship以及truck。每张图片是33232,即3通道彩色图片,分辨率为32*32。
导入程序包:

import torchvision as tv
import torch as t
import torch.utils.data as data
import torchvision.transforms as transforms
from torchvision.transforms import ToPILImage
#将Tensor转成Image,方便可视化
show = ToPILImage()

数据的预处理:

#对数据的预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])

#训练集
trainset = tv.datasets.CIFAR10(root='/data/',train=True,download=True,transform=transform)
trainloader = data.DataLoader(trainset,batch_size=4,shuffle=True,num_workers=2)

#测试集
testset = tv.datasets.CIFAR10('/data/',train=False,download=True,transform=transform)
testloaders = data.DataLoader(testset,batch_size=4,shuffle=False,num_workers=2)

classes = ('plane','car','bird','cat','deer','dog','frog','horse','ship','truck')

结果如下:
在这里插入图片描述
输出图片信息:

(data,label) = trainset[100]
print(classes[label])
#(data+1)/2是为了还原被归一化的数据
show((data+1)/2).resize((100,100))

结果如下:
在这里插入图片描述
Dataloader是一个可迭代的对象,它将dataset返回的每一条数据样本拼接成一个batch,并提供多线程加速优化和数据打乱等操作。

dataiter = iter(trainloader)
images,labels = dataiter.next()
print(' '.join('%11s'%classes[labels[j]] for j in range(4)))
show(tv.utils.make_grid((images+1)/2)).resize((400,100))

在这里插入图片描述

定义网络

#定义网络
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.conv1 = nn.Conv2d(3,6,5)
        self.conv2 = nn.Conv2d(6,16,5)
        self.fc1 = nn.Linear(16*5*5,120)
        self.fc2 = nn.Linear(120,84)
        self.fc3 = nn.Linear(84,10)
        
    def forward(self,x):
        x = F.max_pool2d(F.relu(self.conv1(x)),(2,2))
        x = F.max_pool2d(F.relu(self.conv2(x)),2)
        x = x.view(x.size()[0],-1)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
    
net = Net()
print(net)

运行结果:
在这里插入图片描述

定义损失网络和优化器

#定义损失函数和优化器
from torch import optim
#交叉熵损失函数
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(),lr=0.001,momentum=0.9)

训练网络

#训练网络
from torch.autograd import Variable
#遍历完一遍数据称为一个epoch
for epoch in range(20):
    running_loss = 0.0
    for i,data in enumerate(trainloader,0):
        inputs,labels = data
        inputs,labels = Variable(inputs),Variable(labels)
        #梯度清零
        optimizer.zero_grad()
        #前向传播+反向传播
        outputs = net(inputs)
        loss = criterion(outputs,labels)
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
        if i%2000 == 1999:
            print('[%d,%5d] loss:%.3f'%(epoch+1,i+1,running_loss/2000))
            running_loss = 0.0
print('Finishing Training')

在这里插入图片描述
将测试图片输入网络,计算它的label,然后与实际的label进行比较

dataiter = iter(testloader)
images,labels = dataiter.next()
print("实际的label:",''.join('%08s'%classes[labels[j]] for j in range(4)))
show(tv.utils.make_grid(images/2-0.5)).resize((400,100))

在这里插入图片描述
计算网络预测的label

# 计算图片在每个类别上的分数
outputs = net(Variable(images))
_,predicted = t.max(outputs.data,1)
print('预测结果:',' '.join('%5s'%classes[predicted[j]] for j in range(4)))

在这里插入图片描述
在整个测试集上的效果

correct = 0
total = 0
for data in testloader:
    images,labels = data
    outputs = net(Variable(images))
    _,predicted = t.max(outputs,1)
    total+=labels.size(0)
    correct += (predicted == labels).sum()
print('10000张测试集中的准确率为:%d %%'%(100*correct/total))

在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Keras是一个基于Python开发的深度学习库,可以方便地创建和训练神经网络模型。CIFAR-10是一个用于图像分的数据集,包含了10个不同类别的60000张32x32像素彩色图像。 VGG是一种经典的卷积神经网络模型,它在图像分任务上具有很高的准确率。使用Keras对CIFAR-10数据集进行VGG模型的图像分,可以通过以下步骤实现: 1. 首先,需要导入所需的Keras库和模块,包括导入CIFAR-10数据集。 2. 然后,可以创建一个顺序模型,该模型将用于构建VGG网络。 3. 在创建模型时,需要添加一系列的卷积层和池化层。对于VGG模型,常用的是使用多个卷积层和池化层的组合。 4. 在最后几层,可以添加全连接层和输出层,用于分预测。可以根据具体情况设置神经元数量。 5. 在模型完成构建后,需要编译模型并选择适当的损失函数和优化器。对于图像分,常用的是交叉熵损失函数和Adam优化器。 6. 接下来,可以使用训练集对模型进行训练。可以选择合适的批次大小和迭代次数,并使用模型的fit()函数进行训练。 7. 训练完成后,可以使用测试集对模型进行评估,并计算模型的准确率。 8. 最后,可以使用模型对新的图像进行预测,并得到图像的分结果。 总之,使用Keras对CIFAR-10图像分中的VGG模型,可以根据上述步骤实现。这样可以构建一个强大的深度学习模型,用于对CIFAR-10数据集中的图像进行准确的分

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值