前言

最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档。自己也做了一些标注,都用斜体标记出来了。中间可能额外还加了自己遇到的问题或是运行结果之类的。欢迎交流指正,拒绝喷子!
官方教程的原文链接:http://caffe.berkeleyvision.org/gathered/examples/cifar10.html

Alex’s CIFAR-10 tutorial, Caffe style

Alex Krizhevskycuda-convert详细描述了在CIFAR-10数据集上取得了不错的表现的模型的定义,参数,以及训练过程等信息。这个例子就是对他的研究结果的基于caffe复现。

事先声明,我们默认你已经成功地编译了Caffe源码。如果没有,请参考Installation Page。在这篇教程中,我们也默认认为你的caffe安装在CAFFE_ROOT

感谢@chyojn对定义模型的模式和解决方案的配置提供帮助。

这个例子也还只会一个半成品。最好还是进一步解释网络和训练选择的细节,并对整个训练进行基准测试。

准备数据集

首先你需要从CIFAR-10 website下载并转换数据集。为了做到这个,直接运行下面的命令:

cd $CAFFE_ROOT
./data/cifar10/get_cifar10.sh
./examples/cifar10/create_cifar10.sh

如果终端反馈报错说wget或是gunzip没有安装,你还需要分别安装他们。在运行了上面的脚本之后,就可以得到数据集:./cifar10-leveldb,还有数据集图像均值文件:./mean.binaryproto

模型

CIFAT-10模型是一个由卷积层、池化层、ReLu非线性单元、以及对比规范化的卷积神经网络,在所有层的最上层有一个线性分类器。我们已经把这个模型定义在了:CAFFE_ROOT/examples/cifar10/cifar10_quick_train_test.prototxt

训练并测试”快捷“模型

在你已经写好了定义网络的prorbuf和解决方案的protobuf后,训练模型是很简单的(参考MNIST Tutorial)。直接运行train_quick.sh,或是输入如下指令:

cd $CAFFE_ROOT
./examples/cifar10/train_quick.sh

train_quick.sh是一个很简单的脚本,所以打开它看看。主要的训练工具就是有train模式的caffe,并且解决方案的protobuf是他的根据。

当你运行代码时,可以看到如下信息一闪而过:

I0317 21:52:48.945710 2008298256 net.cpp:74] Creating Layer conv1
I0317 21:52:48.945716 2008298256 net.cpp:84] conv1 <- data
I0317 21:52:48.945725 2008298256 net.cpp:110] conv1 -> conv1
I0317 21:52:49.298691 2008298256 net.cpp:125] Top shape: 100 32 32 32 (3276800)
I0317 21:52:49.298719 2008298256 net.cpp:151] conv1 needs backward computation.

这些信息告诉了你各层的细节,它们的连接方式以及输出大小,这些东西在调试中会有很大帮助。在初始化之后,训练就会开始:

I0317 21:52:49.309370 2008298256 net.cpp:166] Network initialization done.
I0317 21:52:49.309376 2008298256 net.cpp:167] Memory required for Data 23790808
I0317 21:52:49.309422 2008298256 solver.cpp:36] Solver scaffolding done.
I0317 21:52:49.309447 2008298256 solver.cpp:47] Solving CIFAR10_quick_train

基于solver文件的设置,每迭代100次我们会打印出训练的loss函数值,并每迭代500次测试一次整个网络。你会看到类似如下的一些信息:

I0317 21:53:12.179772 2008298256 solver.cpp:208] Iteration 100, lr = 0.001
I0317 21:53:12.185698 2008298256 solver.cpp:65] Iteration 100, loss = 1.73643
...
I0317 21:54:41.150030 2008298256 solver.cpp:87] Iteration 500, Testing net
I0317 21:54:47.129461 2008298256 solver.cpp:114] Test score #0: 0.5504
I0317 21:54:47.129500 2008298256 solver.cpp:114] Test score #1: 1.27805

对于每一次训练的迭代,lr是那次迭代的学习率,loss是训练的损耗函数。对于测试阶段的输出值,score 0表示的是准确率,score 1表示额是测试集的loss函数输出值。

喝杯咖啡去吧,回来差不多就结束了。

I0317 22:12:19.666914 2008298256 solver.cpp:87] Iteration 5000, Testing net
I0317 22:12:25.580330 2008298256 solver.cpp:114] Test score #0: 0.7533
I0317 22:12:25.580379 2008298256 solver.cpp:114] Test score #1: 0.739837
I0317 22:12:25.587262 2008298256 solver.cpp:130] Snapshotting to cifar10_quick_iter_5000
I0317 22:12:25.590215 2008298256 solver.cpp:137] Snapshotting solver state to cifar10_quick_iter_5000.solverstate
I0317 22:12:25.592813 2008298256 solver.cpp:81] Optimization Done.

我们的模型在测试集上取得了大概75%的准确率。模型的参数都保存在了一个二进制protobuf文件中:cifar10_quick_iter_5000。保存好的这个模型文件也可以在CPUGPU模式下进行部署。如果要在新的数据集下部署这个模型,请查阅CAFFE_ROOT/examples/cifar10/cifar10_quick.prototxt文件。

为什么要在GPU上训练?

尽管CIFAR-10数据集依然比较小,但却已经有足够多的数据使得GPU的训练显得很有吸引了了。

如果要对比GPUCPU的训练速度,可以在cifar*solver.prototxt中修改一行:

# solver mode: CPU or GPU
solver_mode: CPU

然后你就可以使用CPU模式来训练了。

Caffe官方教程翻译(4):CIFAR-10 turorial相关推荐

  1. Caffe官方教程翻译(10):Editing model parameters

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  2. Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  3. Caffe官方教程翻译(7):Fine-tuning for Style Recognition

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  4. Caffe官方教程翻译(6):Learning LeNet

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  5. Caffe官方教程翻译(5):Classification: Instant Recognition with Caffe

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  6. Caffe官方教程翻译(3):Siamese Network Training with Caffe

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  7. Caffe官方教程翻译(1):LeNet MNIST Tutorial

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  8. Caffe官方教程翻译(9):Multilabel Classification with Python Data Layer

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  9. Caffe官方教程翻译(2):Web demo

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

最新文章

  1. Iaas、Caas、Paas、Faas!选择正确的平台!
  2. matlab中-psi_matlab输出论文仿真图
  3. 一本真正讲“大数据”处理思路的书
  4. python3 struct模块 处理二进制 pack unpack用法
  5. MySQL主从失败 错误Got fatal error 1236解决方法
  6. CentOS 7安装Zabbix 3.4
  7. 程序员经验分享:Android高级工程师系列学习路线介绍,面试必备
  8. Linux - 时间相关命令 - ntpdate, date, hwclock
  9. excel打开空白_啥?下载的文件显示“文件已损坏,无法打开”?
  10. 从头开始开发gis_DevRel工程师一:从头开始建立开发人员关系团队
  11. Spring高级之注解@Import注解、ImportSelector、ImportBeanDefinitionRegistrar详解(超详细)
  12. linux常用目录操作命令
  13. Java垃圾回收机制分析
  14. 面试:Synchronized锁升级(理解)
  15. solaris系统的crontab定时任务
  16. Ubutun16.04安装和使用daemontools
  17. Excel精选28个实用技巧实例学习
  18. 编程啦1001_超级最小公倍数
  19. 理解透彻!java微信公众号开发流程
  20. 日常坚持记账,简单好用的记账本分享给你

热门文章

  1. linux停止nodejs,node.js – 在linux重启后,nodejs消失了
  2. 01ts简介和相关配置
  3. Win7和VS2013上使用Intel的TBB
  4. 线程管理(七)守护线程的创建和运行
  5. 《C#设计模式》PPT及源码分享
  6. IDEA代码生成插件CodeMaker
  7. Visual Studio Code 配置指南
  8. Hadoop 数据类型与文件结构剖析 Sequence, Map, Set, Array, BloomMap Files
  9. 多元分布和狄利克雷分布
  10. 程序员面试题精选100题(56)-C/C++/C#面试题(4)