caffe教程翻译:Alex’s CIFAR-10 tutorial, Caffe style
2016-04-14 10:46
357 查看
原文地址:http://caffe.berkeleyvision.org/gathered/examples/cifar10.html
本文假设caffe安装在根目录
如果提示
在运行代码过程中,会在屏幕上看到以下输出:
这些信息详细描述了各层之间的连接和输出形状,在调试环节很有用。初始化后,训练开始:
基于solver的配置,每100次迭代打印一次loss值,每500次进行一次测试。会看到以下信息:
对于每次训练迭代,
一段时间后,训练结束:
我们的模型达到了大约75%的准确率,模型参数以二进制形式存储在文件:
参考文件
你会发现,GPU训练更快速一些。
本文假设caffe安装在根目录
CAFFE_ROOT下
数据准备
首先需要从CIFAR-10 websit网站上下载并转换数据格式。运行一下代码:cd $CAFFE_ROOT ./data/cifar10/get_cifar10.sh ./examples/cifar10/create_cifar10.sh
如果提示
wget或
gunzip未安装,则需要分别安装它们。运行这些脚本后将产生数据集:
./cifar10-leveldb和图像均值文件:
./mean.binaryproto。
模型
Cifar-10模型一个由卷积层(convolution)、池化层(pooling)、矫正线性化单元(rectified linear unit)(ReLU)非线性(nonlinearities)、局部对比正则化(local contrast normalization),并在顶层有一个线性分类器的卷积神经网络。在CAFFE_ROOT/examples/cifar10目录下的
cifar10_quick_train_test.prototxt定义了该模型。
训练并测试“快速”模型
在写好了网络定义文件和solver文件后(指MNIST Tutorial),训练十分简单。只需运行train_quick.sh或如下代码:
cd $CAFFE_ROOT ./examples/cifar10/train_quick.sh
train_quick.sh是一条简单的脚本,训练的主要工具是
caffe的
train动作,在solver文件中定义了它的参数。
在运行代码过程中,会在屏幕上看到以下输出:
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表示损失函数。对于带有
testing短语的输出, score 0代表准确率,score 1代表损失值。
一段时间后,训练结束:
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%的准确率,模型参数以二进制形式存储在文件:
cifar10_quick_iter_5000中。
参考文件
CAFFE_ROOT/examples/cifar10/cifar10_quick.prototxt在新的数据库上应用模型。
为何在GPU上训练
在cifar*solver.prototxt文件中修改相应行,来比较CPU与GPU的训练速度:
# solver mode: CPU or GPU solver_mode: CPU
你会发现,GPU训练更快速一些。
相关文章推荐
- 10 个超棒的 jQuery 视频插件
- JSP:basePath的作用
- ajaxfileupload.js插件实现图片无刷新上传
- extjs中loading效果
- js前台检测上传图片大小的总结
- 【转载】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
- JavaScript 两种计时器
- 加载本地HTML文件
- Javascript模块化编程(三):require.js的用法
- YY游戏云的AngularJS实践
- Jquery+CSS 自定义联想搜索框,带删除图标,多个form表单ajaxsbumit
- ***HTML +CSS 总结与归纳
- (四)html输入框提示和输入选择
- ButterKinfe原理,并简单仿照ButterKinfe定义自己的ButterKnife
- jsp中超链接路径的写法
- 剑指offer 旋转数组的最小数字
- javascript 高级程序设计 十一
- css javascript嵌入html5文件
- 前端通信进阶
- Js闭包常见三种用法