1. 综述

Cifar-10 是由 Hinton 的两个大弟子 Alex Krizhevsky、Ilya Sutskever 收集的一个用于普适物体识别的数据集。Cifar 是加拿大政府牵头投资的一个先进科学项目研究所。Hinton、Bengio和他的学生在2004年拿到了 Cifar 投资的少量资金,建立了神经计算和自适应感知项目。这个项目结集了不少计算机科学家、生物学家、电气工程师、神经科学家、物理学家、心理学家,加速推动了 Deep Learning  的进程。从这个阵容来看,DL 已经和 ML 系的数据挖掘分的很远了。Deep Learning 强调的是自适应感知和人工智能,是计算机与神经科学交叉;Data Mining 强调的是高速、大数据、统计数学分析,是计算机和数学的交叉。

CIFAR-10是机器学习分类问题中的一个标尺问题。目标是将RGB 32*32的图像分成10类:飞机(airplane),汽车(automobile),鸟(bird),猫(cat),鹿(deer),狗(dog),青蛙(frog),马(horse),船(ship),卡车(truck)。

可以看到,同已经成熟的人脸识别相比,普适物体识别挑战巨大,数据中含有大量特征、噪声,识别物体比例不一。因而,Cifar-10 相对于传统图像识别数据集,是相当有挑战的。想了解更多信息请参考CIFAR-10 page,以及 Alex Krizhevsky 的技术报告。

2. 目标

建立一个相对小的卷积神经网络分类图像。在这个过程中, 
1. 强调了网络结构、训练和评估的规范组织方式。 
2. 提供了构建更大和更精细的模型的模板。

选择CIFAR-10的原因:一是它足够复杂,可以训练TensorFlow的大规模模型的大部分能力;二是,它足够小,可以快速训练,这对于尝试新想法和实验新技术是理想的。

3. 重点

本教程为在TensorFlow中设计更大和更精细的模型了展示几个重要构想:

  • 核心数学元素包括:卷积,激活函数ReLu, 池化max-pooling,标准化local response normalization
  • 可视化(visualization)训练过程中的网络激活(network activities),包含图像输入,损失函数,激活值和梯度的分布。
  • 计算学习参数的移动平均(moving average),使用移动平均法提升预测效果。
  • 实现随时间下降的学习率(learning rate)。
  • 对输入数据预提取队列(queues),让模型从硬盘延迟和图像预处理中独立出来。

    也提供了多GPU版本,暂时忽略。

4.模型结构

模型是一个包含卷积和非线性的多层结构,后面连着全连接层和softmax分类器。模型遵循Alex Krizhevsky描述的结构。 
共有1,068,298个学习参数,在单张影像上计算inference需要19.5M个乘-加操作。 
在单GPU加速的电脑上训练了3个多小时,精度达到86%。本电脑GPU是NVIDIA GeForce GTX 750。

5.代码组织

代码文件

文件 说明
cifar10_input.py 读取本地CIFAR-10的二进制文件格式的内容
cifar10.py 建立CIFAR-10的模型
cifar10_train.py 在CPU或GPU上训练CIFAR-10的模型
cifar10_multi_gpu_train.py 在多GPU上训练CIFAR-10的模型。
cifar10_eval.py 评估CIFAR-10模型的预测性能

6.CIFAR-10模型

cifar-10文件包含了网络的各个操作,完整的训练图包含765个操作。通过使用一下模块构建图,我们可以使代码更具复用性。 
1. 模型输入(Model Inputs): inputs() 和distorted_inputs()分别为评估和训练阶段读取和预处理图像。 
2. 模型预测(Model predictions):inference()进行推导(inference)操作。 
3. 模型训练(Model training): loss()计算损失,train()计算梯度和更新参数。可视化summaries。

通过Tensorboard可以看到384个维度:

6.1 模型输入

用inputs()和distorted_inputs()函数从CIFAR-10二进制文件中输入图像。因为文件包含字节固定长度的记录,所以使用tf.FixedLengthRecordReader。关于Reader如何工作,详见Reading Data。

图像处理方法: 
- 图像被裁剪成24*24大小,评估时从中心裁剪,训练时随机裁剪。 
- 近似白化图像,让模型对动态范围不敏感。

训练时,人工对图像增加一些列随机变形操作,以增大图像数据集: 
- 随机从左到右翻转(flip)图像。 
- 随机扭曲图像亮度(image brightness)。 
- 随机扭曲图像对比度(iamge contrast)。

使用iamge_summary,可以在TensorBoard中可视化图像,验证输入图像是否正确。读取图像并扭曲图像很耗费时间,为防止减慢训练,在16个独立线程里处理。

6.2模型预测

用inference()计算预测值的逻辑斯(logits)。下图展示模型层次组成 

如下解释:

TensorBoard绘制的计算图


6.3模型训练

N-way 分类一般用多项式逻辑回归,比如Softmax。损失函数的total loss包括交叉熵(cross-entropy),正则化的weight decay loss。

在tensorboard中可视化total loss 
 
使用SGD和指数衰减的学习率 

7.启动和训练模型

运行代码

python cifar10_train.py

输出

"D:\Program Files (x86)\Anaconda3 4.2\envs\tensorflow\python.exe" D:/PycharmProject/cifar/cifar10/cifar10_train.py
Filling queue with 20000 CIFAR images before starting to train. This will take a few minutes.
2018-01-25 09:40:55.645287: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2018-01-25 09:40:57.199692: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:1030] Found device 0 with properties: 
name: GeForce GTX 750 Ti major: 5 minor: 0 memoryClockRate(GHz): 1.0845
pciBusID: 0000:03:00.0
totalMemory: 2.00GiB freeMemory: 1.65GiB
2018-01-25 09:40:57.199971: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 750 Ti, pci bus id: 0000:03:00.0, compute capability: 5.0)
2018-01-25 09:41:14.963154: step 0, loss = 4.68 (65.5 examples/sec; 1.955 sec/batch)
2018-01-25 09:41:15.462490: step 10, loss = 4.65 (2563.4 examples/sec; 0.050 sec/batch)
2018-01-25 09:41:15.867777: step 20, loss = 4.58 (3158.3 examples/sec; 0.041 sec/batch)
2018-01-25 09:41:16.277066: step 30, loss = 4.38 (3127.4 examples/sec; 0.041 sec/batch)
2018-01-25 09:41:16.678350: step 40, loss = 4.36 (3189.8 examples/sec; 0.040 sec/batch)
2018-01-25 09:41:17.084650: step 50, loss = 4.31 (3150.4 examples/sec; 0.041 sec/batch)
2018-01-25 09:41:17.481927: step 60, loss = 4.22 (3221.9 examples/sec; 0.040 sec/batch)
… 
每10个step输出一次,有total loss,每秒处理样本数和运行一个batch需要的时间。

cifar-10周期性地在checkpoint files中保存模型参数。checkpoint files会在cifar10_eval.py中测试预测效果。

cifar10_train.py使用SummaryWriter周期性地保存中间数据,tensorboard可以实现可视化。

在CMD中输入

tensorboard --logdir=D:\tmp\cifar10_train

在谷歌浏览器(推荐)中进入提示网页,(我的:http://desktop-ic1scc2:6006),即可打开tensorboard。

8.评估模型

输入

python cifar10_eval.py

输出

2018-1-25 09:30:44.391206: precision @ 1 = 0.860 
… 
精度在86%左右。

参考:官方教程Convolutional Neural Networks

CIFAR-10整体解析与评价相关推荐

  1. mulesoft Module 10 quiz 解析

    mulesoft Module 10 quiz 解析 概述(重中之重) 1. How can an error scope be configured to catch all errors in t ...

  2. 新手XP下硬盘安装ubuntu10.10全程解析

    http://linux.itwaka.com Ubuntu 10.10在2010年10月正式发布,让众多Ubuntu用户都对这款全新的系统充满期望.毕竟,Ubuntu 10.10是Canonical ...

  3. 机器学习第10天:模型评价方法及代码实现

    文章目录 一.分类评价指标 1.精确率(Precision) 2.召回率(Recall) 3.准确率(Accuracy) 4.F1_score 二.回归评价指标 1.平方根误差(RMSE) 2.均方误 ...

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

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

  5. 3月数据库排行:前10整体下行,出新技术了?

    DB-Engines 数据库流行度排行榜 3 月更新已发布,排名前二十如下: 排名方面没有任何变动(仅针对前十),相信很长一段时间内也都不会变动,毕竟巨头的位置不是一时半刻就能动摇的.不过这个月的排行 ...

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

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

  7. mongodb最多数据库_2020 年3 月数据库排行:前 10 整体下行,出新技术了?

    (给数据分析与开发加星标,提升数据技能) 来源:开源中国 www.oschina.net/news/113778/db-engines-ranking-202003 DB-Engines 数据库流行度 ...

  8. 人脸识别合集 | 10 ArcFace解析

    转自:https://zhuanlan.zhihu.com/p/76541084 ArcFace/InsightFace(弧度)是伦敦帝国理工学院邓建康等在2018.01发表,在SphereFace基 ...

  9. ROS: global_planner 整体解析

    在目前的ROS版本中,机器人全局路径规划使用的是navfn包,这在move_base的默认参数中可以找到 base_global_planner  (string, default: "na ...

最新文章

  1. 论文阅读:CNN-RNN: A Unified Framework for Multi-label Image Classification
  2. 教你打造 Android 中的 IOC 框架
  3. C++ 哪些函数不能声明成虚函数
  4. 同步方法 sleep和wait 线程同步的方法
  5. JavaScript模块化-require.js
  6. Bit-Z开放零门槛做市商计划 最高返100%交易手续费
  7. ROS中配置主从机需注意的几点
  8. Android 编译系统分析(二)
  9. 1041 考试座位号
  10. 并发-6-wait、notify、Semaphore、CountDownLatch、CyclicBarrier
  11. nssl1143,jzoj3493-三角形【排序,数学,几何】
  12. python安装pygame模块_windows下 python 如何安装pygame模块
  13. netstat 查看端口
  14. 前端浏览器兼容性网站
  15. 从月薪5千到财富自由:有远见的人都在做这件事情
  16. 深度网络自适应DCC算法
  17. 零基础英语语法速成(一)
  18. 7-2 The Judger (25分)
  19. Python图像处理库PIL中图像格式转换(二)
  20. 培养孩子讲故事的心得

热门文章

  1. 关于虚拟机VM0,1,8的总结以及宿主机无法ping通虚拟机和虚拟机无法ping通外网的问题总结
  2. 决策树ID3、C4.5和CART算法例子详解
  3. MFC中Create()函数的用法
  4. 2020年软考-信息系统项目管理师--基础知识精讲视频-任铄-专题视频课程
  5. java 多线程开发注意事项
  6. this.$refs 为空问题
  7. 小作坊开发与正规团队开发
  8. Cocos 开发者沙龙「厦门站」报名开启!亮点提前曝光
  9. windows开机出现‘应用程序正常初始化(0xc0000044)失败’进不了系统
  10. deque容器java_ArrayDeque——Java容器中一颗被雪藏的明珠