CIFAR-10分类,步骤如下:

1)使用torchvision加载并预处理CIFAR-10数据集

2)定义网络

3)定义损失函数和优化器

4)训练网络并更新网络参数

5)测试网络

CIFAR-10数据加载及预处理

CIFAR-10是一个常用的彩色图片数据集,它有10个类别airplane、automobile、bird、cat、deer、dog、frog、horse、ship和truck。每张图片都是3*32*32,也就是3通道彩色图片,分辨率为32*32。

import torch as t
import torchvision as tv
import torchvision.transforms as transforms
from torchvision.transforms import ToPILImage
show = ToPILImage()#可以把Tensor转成Image,方便可视化#第一次运行程序torchvision会自动下载CIFAR-10数据集
#大约100MB,需要花费一定的时间,
#如果已经下载有CIFAR-10,可通过root参数指定#定义对于数据的预处理
transform=transforms.Compose([transforms.ToTensor(),#转为Tensortransforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))#归一化
])#训练集
trainset = tv.datasets.CIFAR10(root='/B/CIFAR-10data/',train=True,download=True,transform=transform
)trainloader=t.utils.data.DataLoader(trainset,batch_size=4,shuffle=True,num_workers=2
)#测试集
testset = tv.datasets.CIFAR10 ('/B/CIFAR-10data/',train=False,download=True,transform=transform
)testloader = t.utils.data.DataLoader (testset,batch_size=4,shuffle=False,num_workers=2
)
classes=('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')#定义网络
import torch.nn as nn
import torch.nn.functional as F
import timestart = time.time ()  # 计时# 定义网络结构
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)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 xnet = Net ()
print (net)#定义优化和损失
# 定义优化和损失
loss_func = nn.CrossEntropyLoss ()  # 交叉熵损失函数
optimizer = t.optim.SGD (net.parameters (), lr=0.001, momentum=0.9)# 训练网络
for epoch in range (2):running_loss = 0for i, data in enumerate (trainloader, 0):inputs, labels = dataoutputs = net (inputs)loss = loss_func (outputs, labels)optimizer.zero_grad ()loss.backward ()optimizer.step ()running_loss += loss.item ()if i % 2000 == 1999:print ('epoch:', epoch + 1, '|i:', i + 1, '|loss:%.3f' % (running_loss / 2000))running_loss = 0.0
end = time.time ()
time_using = end - start
print ('finish training')
print ('time:', time_using)#测试结果correct = 0 #定义的预测正确的图片数
total = 0#总共图片个数
with t.no_grad():for data in testloader:images,labels = dataoutputs = net(images)_,predict = t.max(outputs,1)total += labels.size(0)correct += (predict == labels).sum()
print('测试集中的准确率为:%d%%'%(100*correct/total))

Dataloader是一个可迭代的对象,它将dataset返回的每一条数据样本拼接成一个batch,并提供多线程加速优化和数据打乱等操作。当程序对dataset的所有数据遍历完一遍之后,对Dataloader也完成了一次迭代。

此处训练了仅仅2个epoch(遍历完一遍数据集称为一个epoch),可观察网络是否有效。将测试图片输入网络,计算它的label,然后与实际label进行比较。

输出:

Files already downloaded and verified
Files already downloaded and verified
Net(
  (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
  (fc1): Linear(in_features=400, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)
epoch: 1 |i: 2000 |loss:2.156
epoch: 1 |i: 4000 |loss:1.826
epoch: 1 |i: 6000 |loss:1.693
epoch: 1 |i: 8000 |loss:1.574
epoch: 1 |i: 10000 |loss:1.527
epoch: 1 |i: 12000 |loss:1.476
epoch: 2 |i: 2000 |loss:1.391
epoch: 2 |i: 4000 |loss:1.360
epoch: 2 |i: 6000 |loss:1.349
epoch: 2 |i: 8000 |loss:1.326
epoch: 2 |i: 10000 |loss:1.300
epoch: 2 |i: 12000 |loss:1.291
finish training
time: 217.39351534843445
测试集中的准确率为:54%

我们已经可以看出效果,准确率为54%,但这只是一部分图片,我们再来看看在整个测试机上的效果。

训练的准确率远远比随机猜测的(准确率为10%)好,证明网络确实学到了东西。

在GPU上训练

就像之前把Tensor从CPU转到GPU一样,模型也可以从CPU转到GPU。

if t.cuda.is_available():net.cuda()images=images.cuda()labels=labels.cuda()output=net(Variable(images))loss=criterion(output,Variable(labels))

1.6 例子:CIFAR-10分类相关推荐

  1. 【神经网络】(4) 卷积神经网络(CNN),自定义网络,案例:彩色图像10分类

    各位同学大家好,今天和大家分享一下TensorFlow2.0中如何使用函数方法自定义卷积神经网络. 1. 导入数据 获取系统自带的10分类图像数据,50k张用于训练,10k张用于测试. # 10分类卷 ...

  2. 实验:3*3卷积核10分类9*9图片卷积核数量最优值

    (0,1,2,3,4,5,6,7,8,9)--con(3*3)*n-49*n*30*10 将mnist的图片用间隔取点的办法处理成9*9,用3*3的卷积核,卷积核的数量从1个到57个,收敛标准是1e- ...

  3. DL之LiRDNNCNN:利用LiR、DNN、CNN算法对MNIST手写数字图片(csv)识别数据集实现(10)分类预测

    DL之LiR&DNN&CNN:利用LiR.DNN.CNN算法对MNIST手写数字图片(csv)识别数据集实现(10)分类预测 目录 输出结果 设计思路 核心代码 输出结果 数据集:Da ...

  4. 【Python成长之路】机器学习:10+分类算法汇总学习

    一直都说python是人工智能.机器学习等算法的良配,很多python大神除了常规的大数据爬虫.网站开发等代码能力外,人工智能/机器学习也都是手到擒来.因此我也"跳坑"来看看 . ...

  5. HALCON 20.11:深度学习笔记(10)---分类

    HALCON 20.11:深度学习笔记(10)---分类 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何在训练和推理阶段使用基于深度学习的分类. 基于深度学习的分类是一种对一 ...

  6. 【神经网络】(8) 卷积神经网络(Mobilenet_v1),案例:cifar图像10分类

    各位同学大家好,今天和大家分享一下TensorFlow2.0中如何搭载Mobilenet_v1神经网络. 1. 模型简介 MobileNet系列是轻量级网络的一个系列,是针对移动端以及嵌入式视觉的应用 ...

  7. 二级分类 php 两张表,PHP_php smarty 二级分类代码和模版循环例子,二级分类的数据表结构如下: - phpStudy...

    php smarty 二级分类代码和模版循环例子 二级分类的数据表结构如下: PHP代码如下 复制代码 代码如下: /** @ 文章分类 含二级分类 @ param int $rootnum -- 一 ...

  8. 基于SVM的思想做CIFAR 10图像分类

    #SVM 回顾一下之前的SVM,找到一个间隔最大的函数,使得正负样本离该函数是最远的,是否最远不是看哪个点离函数最远,而是找到一个离函数最近的点看他是不是和该分割函数离的最近的. 使用large ma ...

  9. 深度学习入门——利用卷积神经网络训练CIFAR—10数据集

    CIFAR-10数据集简介 CIFAR-10是由Hinton的学生Alex Krizhevsky和Ilya Sutskever整理的一个用于普适物体的小型数据集.它一共包含10个类别的RGB彩色图片: ...

  10. 为CIFAR图片分类模型添加BN

    一 实例描述 演示BN函数的使用方法. 二 代码 import cifar10_input import tensorflow as tf import numpy as np from tensor ...

最新文章

  1. 2018.12.13待填之坑
  2. python数据可视化的特点_Python数据可视化 pyecharts实现各种统计图表过程详解
  3. 使用jquery图表插件jqplot之折线图
  4. 数据结构——平衡二叉树
  5. 面试官跟我扯了半小时 CountDownLatch 后,给我发 Offer?| 原力计划
  6. 计算机网络的概述发展填空题,计算机网络安全概述填空题.doc
  7. set集合判断集合中是否有无元素_JAVA 集合
  8. st7789 旋转_玩转 ESP32 + Arduino(二十八) TFT_eSPI库驱动ST7789
  9. [项目管理] 项目管理之配置管理
  10. java多线程(超级详细)
  11. 目标决定人生——没有目标就失去一切!
  12. 常用应用层协议及HTTP协议
  13. 匠心铸梦 敏涵控股集团打造民族领军品牌
  14. 统计文本文件中的英文单词数量
  15. UVA 几道dp题总结
  16. 3.23 docker---内存控制,cgroup,cpu控制,磁盘控制,docker-compose,docker-swam集群,K8s控制docker
  17. INSTALL_FAILED_NO_MATCHING_ABIS 安装包安装失败,返回代码res=-113的解决办法 B站弹幕
  18. 每天节省一点点,你的生活竟可以这般变化!
  19. 穿越时间的蛀洞——书评《Java企业设计模式》
  20. bootstrap分页css样式,修改bootstrap-table中的分页样式

热门文章

  1. 开拓者探地雷达BS-M
  2. 经典动态规划:高楼扔鸡蛋
  3. 印度成“网络犯罪天堂”的三个原因
  4. 关于string字符串大小比较以及运算符重载
  5. 关闭iframe中弹窗,视频也关闭播放
  6. VS+QT+SQLite实现简单的计算器
  7. 【第一阶段:java基础】第7章:面向对象编程中级-2(P307-P318):多态
  8. js 特效 手风琴效果
  9. java国外著名网站
  10. java 将字符串首字母变大写