为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载。但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了。

注意:在caffe中运行所有程序,都必须在根目录下进行。

1、mnist实例

mnist是一个手写数字库。mnist最初用于支票上的手写数字识别, 现在成了DL的入门练习库。征对mnist识别的专门模型是Lenet,算是最早的cnn模型了。

mnist数据训练样本为60000张,测试样本为10000张,每个样本为28*28大小的黑白图片,手写数字为0-9,因此分为10类。

首先下载mnist数据

(caffe_src) root@ranxf-TEST:/workdisk/caffe# sh data/mnist/get_mnist.sh
Downloading...
---- ::-- http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
正在解析主机 yann.lecun.com (yann.lecun.com)... 216.165.22.6
正在连接 yann.lecun.com (yann.lecun.com)|216.165.22.6|:... 已连接。
已发出 HTTP 请求,正在等待回应... OK
长度: (9.5M) [application/x-gzip]
正在保存至: “train-images-idx3-ubyte.gz” train-images-idx3-ubyte. %[===============================>] 9.45M .5KB/s in 14m 22s -- :: (11.2 KB/s) - 已保存 “train-images-idx3-ubyte.gz” [/]) ---- ::-- http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
正在解析主机 yann.lecun.com (yann.lecun.com)... 216.165.22.6
正在连接 yann.lecun.com (yann.lecun.com)|216.165.22.6|:... 已连接。
已发出 HTTP 请求,正在等待回应... OK
长度: (28K) [application/x-gzip]
正在保存至: “train-labels-idx1-ubyte.gz” train-labels-idx1-ubyte. %[===============================>] .20K .8KB/s in .5s -- :: (54.8 KB/s) - 已保存 “train-labels-idx1-ubyte.gz” [/]) ---- ::-- http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
正在解析主机 yann.lecun.com (yann.lecun.com)... 216.165.22.6
正在连接 yann.lecun.com (yann.lecun.com)|216.165.22.6|:... 已连接。
已发出 HTTP 请求,正在等待回应... OK
长度: (1.6M) [application/x-gzip]
正在保存至: “t10k-images-idx3-ubyte.gz” t10k-images-idx3-ubyte.g %[===============================>] 1.57M .0KB/s in 84s -- :: (19.3 KB/s) - 已保存 “t10k-images-idx3-ubyte.gz” [/]) ---- ::-- http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
正在解析主机 yann.lecun.com (yann.lecun.com)... 216.165.22.6
正在连接 yann.lecun.com (yann.lecun.com)|216.165.22.6|:... 已连接。
已发出 HTTP 请求,正在等待回应... OK
长度: (.4K) [application/x-gzip]
正在保存至: “t10k-labels-idx1-ubyte.gz” t10k-labels-idx1-ubyte.g %[===============================>] .44K --.-KB/s in 0s -- :: ( MB/s) - 已保存 “t10k-labels-idx1-ubyte.gz” [/])

运行成功后,在 data/mnist/目录下有四个文件:

(caffe_src) root@ranxf-TEST:/workdisk/caffe/data/mnist# lst10k-images-idx3-ubyte  训练集样本
t10k-labels-idx1-ubyte 训练集对应标注
train-images-idx3-ubyte 测试集图片
train-labels-idx1-ubyte 测试集对应标注

这些数据不能在caffe中直接使用,需要转换成LMDB数据

(caffe_src) root@ranxf-TEST:/workdisk/caffe# sh examples/mnist/create_mnist.sh
Creating lmdb...
I0912 ::06.644217 db_lmdb.cpp:] Opened lmdb examples/mnist/mnist_train_lmdb
I0912 ::06.644412 convert_mnist_data.cpp:] A total of items.
I0912 ::06.644423 convert_mnist_data.cpp:] Rows: Cols:
I0912 ::11.209887 convert_mnist_data.cpp:] Processed files.
I0912 ::11.485198 db_lmdb.cpp:] Opened lmdb examples/mnist/mnist_test_lmdb
I0912 ::11.485344 convert_mnist_data.cpp:] A total of items.
I0912 ::11.485355 convert_mnist_data.cpp:] Rows: Cols:
I0912 ::12.264843 convert_mnist_data.cpp:] Processed files.
Done.

如果想运行leveldb数据,请运行 examples/siamese/ 文件夹下面的程序。而examples/mnist/ 文件夹是运行lmdb数据

转换成功后,会在 examples/mnist/目录下,生成两个文件夹,分别是mnist_train_lmdb和mnist_test_lmdb,里面存放的data.mdb和lock.mdb,就是我们需要的运行数据。

(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/mnist# cd mnist_test_lmdb/
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/mnist/mnist_test_lmdb# ls
data.mdb lock.mdb
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/mnist/mnist_test_lmdb# cd ../mnist_train_lmdb/
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/mnist/mnist_train_lmdb# ls
data.mdb lock.mdb
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/mnist/mnist_train_lmdb#

接下来是修改配置文件,如果你有GPU且已经完全安装好,这一步可以省略,如果没有,则需要修改solver配置文件。

需要的配置文件有两个,一个是lenet_solver.prototxt,另一个是train_lenet.prototxt.

首先打开lenet_solver.prototxt

(caffe_src) root@ranxf-TEST:/workdisk/caffe# vim examples//mnist/lenet_solver.prototxt

根据需要,在max_iter处设置最大迭代次数,以及决定最后一行solver_mode,是否要改成CPU。(我目前还没有GPU,只能改为CPU)

保存退出后,就可以运行这个例子了

(caffe_src) root@ranxf-TEST:/workdisk/caffe# time sh examples/mnist/train_lenet.sh
I0912 ::03.622133 caffe.cpp:] Use CPU.
I0912 ::03.622301 solver.cpp:] Initializing solver from parameters:
test_iter:
test_interval:
base_lr: 0.01
display:
max_iter:
……………… ………………
I0912 14:05:13.225632  4867 data_layer.cpp:73] Restarting data prefetching from start.
I0912 14:05:13.387485  4864 solver.cpp:414]     Test net output #0: accuracy = 0.9913
I0912 14:05:13.387523  4864 solver.cpp:414]     Test net output #1: loss = 0.0285459 (* 1 = 0.0285459 loss)
I0912 14:05:13.387529  4864 solver.cpp:332] Optimization Done.
I0912 14:05:13.387535  4864 caffe.cpp:250] Optimization Done. real    12m9.863s
user    12m12.844s
sys    0m0.236s

CPU运行时候大约13分钟,精度为99%左右。

(caffe) root@test:/opt/caffe# time sh examples/mnist/train_lenet.sh
I0924 ::55.730465 caffe.cpp:] Using GPUs
I0924 ::55.754664 caffe.cpp:] GPU : GeForce GTX TITAN X
I0924 ::56.068701 solver.cpp:] Initializing solver from parameters:
test_iter:
test_interval:
base_lr: 0.01
display:
max_iter:
lr_policy: "inv"
gamma: 0.0001
power: 0.75
momentum: 0.9
weight_decay: 0.0005
snapshot:
snapshot_prefix: "examples/mnist/lenet"
solver_mode: GPU
device_id:
net: "examples/mnist/lenet_train_test.prototxt"
train_state {
level:
stage: ""
} …………
………… I0924 ::42.541656 sgd_solver.cpp:] Snapshotting solver state to binary proto file examples/mnist/lenet_iter_10000.solverstate
I0924 ::42.546165 solver.cpp:] Iteration , loss = 0.00301418
I0924 ::42.546185 solver.cpp:] Iteration , Testing net (#)
I0924 ::42.783694 data_layer.cpp:] Restarting data prefetching from start.
I0924 ::42.792412 solver.cpp:] Test net output #: accuracy = 0.9917
I0924 ::42.792433 solver.cpp:] Test net output #: loss = 0.0296816 (* = 0.0296816 loss)
I0924 ::42.792439 solver.cpp:] Optimization Done.
I0924 ::42.792444 caffe.cpp:] Optimization Done. real 0m47.216s
user 0m48.420s
sys 0m10.966s

GPU运行时候大约48秒,精度为99%左右。

2、cifar10实例

cifar10数据训练样本50000张,测试样本10000张,每张为32*32的彩色三通道图片,共分为10类。

下载数据:

(caffe_src) root@ranxf-TEST:/workdisk/caffe# sh data/cifar10/get_cifar10.sh
(caffe_src) root@ranxf-TEST:/workdisk/caffe# sh data/cifar10/get_cifar10.sh
Downloading...
---- ::-- http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz
正在解析主机 www.cs.toronto.edu (www.cs.toronto.edu)... 128.100.3.30
正在连接 www.cs.toronto.edu (www.cs.toronto.edu)|128.100.3.30|:... 已连接。
已发出 HTTP 请求,正在等待回应... OK
长度: (162M) [application/x-gzip]
正在保存至: “cifar--binary.tar.gz” cifar--binary.tar.gz %[==========================================================================>] 162.17M .8KB/s in 1h 43m -- :: (26.6 KB/s) - 已保存 “cifar--binary.tar.gz” [/]) Unzipping...
Done.

运行成功后,会在 data/cifar10/文件夹下生成一堆bin文件

(caffe_src) root@ranxf-TEST:/workdisk/caffe/data/cifar10# ll
总用量
drwxr-xr-x root root 9月 : ./
drwxr-xr-x root root 9月 : ../
-rw-r--r-- 6月 batches.meta.txt
-rw-r--r-- 6月 data_batch_1.bin
-rw-r--r-- 6月 data_batch_2.bin
-rw-r--r-- 6月 data_batch_3.bin
-rw-r--r-- 6月 data_batch_4.bin
-rw-r--r-- 6月 data_batch_5.bin
-rwxr-xr-x root root 9月 : get_cifar10.sh*
-rw-r--r-- 6月 readme.html
-rw-r--r-- 6月 test_batch.bin
(caffe_src) root@ranxf-TEST:/workdisk/caffe/data/cifar10#

转换数据格式为lmdb:

(caffe_src) root@ranxf-TEST:/workdisk/caffe# sh examples/cifar10/create_cifar10.sh
Creating lmdb...

转换成功后,会在 examples/cifar10/文件夹下生成两个文件夹,cifar10_train_lmdb和cifar10_test_lmdb, 里面的文件就是我们需要的文件。

(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/cifar10# cd cifar10_train_lmdb/
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/cifar10/cifar10_train_lmdb# ls
data.mdb lock.mdb
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/cifar10/cifar10_train_lmdb# cd ../cifar10_test_lmdb/
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/cifar10/cifar10_test_lmdb# ls
data.mdb lock.mdb
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/cifar10/cifar10_test_lmdb#

为了节省时间,我们进行快速训练(train_quick),训练分为两个阶段,第一个阶段(迭代4000次)调用配置文件cifar10_quick_solver.prototxt, 学习率(base_lr)为0.001

第二阶段(迭代5000次)调用配置文件cifar10_quick_solver_lr1.prototxt, 学习率(base_lr)为0.0001

前后两个配置文件就是学习率(base_lr)和最大迭代次数(max_iter)不一样,其它都是一样。

(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/cifar10# vim cifar10_quick_solver.prototxt
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/cifar10#
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/cifar10# vim cifar10_quick_solver_lr1.prototxt

如果你对配置文件比较熟悉以后,实际上是可以将两个配置文件合二为一的,设置lr_policy为multistep就可以了。

base_lr: 0.001
momentum: 0.9
weight_decay: 0.004
# The learning rate policy
# lr_policy: "fixed"
lr_policy: "multistep"
# Display every iterations
display:
# The maximum number of iterations
max_iter:
# snapshot intermediate results
snapshot:
snapshot_prefix: "examples/cifar10/cifar10_quick"
# solver mode: CPU or GPU
solver_mode: CPU

运行例子:

(caffe_src) root@ranxf-TEST:/workdisk/caffe# time sh examples/cifar10/train_quick.sh
I0912 ::04.298250 caffe.cpp:] Use CPU.
I0912 ::04.298424 solver.cpp:] Initializing solver from parameters:
test_iter:
test_interval:
base_lr: 0.001
display:
max_iter:
lr_policy: "fixed"
momentum: 0.9
weight_decay: 0.004
snapshot:
snapshot_prefix: "examples/cifar10/cifar10_quick"
solver_mode: CPU
……………… I0912 17:10:29.430344 10100 solver.cpp:474] Snapshotting to HDF5 file examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5
I0912 17:10:29.526800 10100 sgd_solver.cpp:296] Snapshotting solver state to HDF5 file examples/cifar10/cifar10_quick_iter_5000.solverstate.h5
I0912 17:10:29.745208 10100 solver.cpp:327] Iteration 5000, loss = 0.480207
I0912 17:10:29.745240 10100 solver.cpp:347] Iteration 5000, Testing net (#0)
I0912 17:10:49.806242 10103 data_layer.cpp:73] Restarting data prefetching from start.
I0912 17:10:50.642014 10100 solver.cpp:414]     Test net output #0: accuracy = 0.7558
I0912 17:10:50.642050 10100 solver.cpp:414]     Test net output #1: loss = 0.739888 (* 1 = 0.739888 loss)
I0912 17:10:50.642055 10100 solver.cpp:332] Optimization Done.
I0912 17:10:50.642061 10100 caffe.cpp:250] Optimization Done. real    47m46.393s
user    47m50.689s
sys    0m0.312

CPU大约48分钟左右,精度75%左右。

以下是GPU运行情况

real    2m6.112s
user 1m23.442s
sys 0m21.771s

Caffe学习使用__运行caffe自带的两个简单例子的更多相关文章

  1. Caffe学习系列(9):运行caffe自带的两个简单例子

    为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...

  2. 转 Caffe学习系列(9):运行caffe自带的两个简单例子

    为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...

  3. 【转载】Caffe学习:运行caffe自带的两个简单例子

    原文:http://www.cnblogs.com/denny402/p/5075490.html 为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data ...

  4. Caffe学习系列(22):caffe图形化操作工具digits运行实例

    上接:Caffe学习系列(21):caffe图形化操作工具digits的安装与运行 经过前面的操作,我们就把数据准备好了. 一.训练一个model 右击右边Models模块的” Images" ...

  5. Caffe学习系列(21):caffe图形化操作工具digits的安装与运行

    经过前面一系列的学习,我们基本上学会了如何在linux下运行caffe程序,也学会了如何用python接口进行数据及参数的可视化. 如果还没有学会的,请自行细细阅读: caffe学习系列:http:/ ...

  6. Caffe学习系列(16):caffe的整体流程

    在某社区看到的回答,觉得不错就转过来了:http://caffecn.cn/?/question/123 Caffe从四个层次来理解:Blob,Layer,Net,Solver. 1.Blob Caf ...

  7. Caffe学习系列(14):Caffe代码阅读

    知乎上这位博主画的caffe的整体结构:https://zhuanlan.zhihu.com/p/21796890?refer=hsmyy Caffe 做train时的流程图,来自http://caf ...

  8. PHP多进程学习(一)__来初步了解一下PHP多进程及简单demo

    php是一门单进程弱类型的语言,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,多进程的作用优点大家可以去网上了解,PHP实现多进程在实际项目中意义也是不容小觑的.比如:日常 ...

  9. Caffe 学习系列

    学习列表: Google protocol buffer在windows下的编译 caffe windows 学习第一步:编译和安装(vs2012+win 64) caffe windows学习:第一 ...

随机推荐

  1. leetcode 509斐波那契数列

    递归方法: 时间O(2^n),空间O(logn) class Solution { public: int fib(int N) { ?N:fib(N-)+fib(N-); } }; 递归+记忆化搜索 ...

  2. AS基本设置

    1,点开as之前应该做的事  很多人一定会在这个界面卡顿很久,其实这是as在检测更新.所以我们在点开as之前先修改它的配置文件,让它不再更新. 找到你安装as的目录,进入bin文件夹找到idea.pr ...

  3. 写10个简单的 linux 命令?

    mkdir 创建文件夹rmdir 删除文件夹rm 删除文件 mv 移动文件cp 拷贝文件cat 查看文件 tail 查看文件尾部more 分页查看文件cd 切换当前目录 ls 列出文件清单reboot ...

  4. VMware or VirtualBox+centos7 安装教程

    一.准备工作:1.首次安装虚拟机时,需要的准备工作:打开intel的虚拟技术服务(否则安装centos系统时会报错).重启电脑,显示log时进入BIOS服务(不同电脑进入BIOS方式不同,一般是进入l ...

  5. Kibana 5.5.2 安装包下载 (各种历史版本下载)

    背景说明 最近项目中在使用 5.5.2 版本的  Elasticsearch 作为数据库,使用的是以前的老版本. 用到 Elasticsearch ,难免要和其相关基本操作命令打交道.选择一款顺手的工 ...

  6. mybatis整合spring,使用org.mybatis.spring.mapper.MapperScannerConfigurer扫描出现问题

    <!-- 加载配置文件 --> <context:property-placeholder location="classpath:db.properties" ...

  7. oop理论

    三大特性: 封装:把对象的属性和行为独立的一个整体,并尽可能的隐藏对象内部实现细节.增加安全性. 继承:从已有的类中派生出新的类,称为子类,子类继承父类的属性和行为,并能根据自己的需求扩展出新的行为. ...

  8. 7.接入类流程-PRACH优化

    PRACH优化 就是伪随机序列随机码(前导序列码).优化的目的就是减小码与码之间碰撞的 基站广播伪随机序列码(如64个),终端挑选一个发送.不同的用户使用同一个码就会产生碰撞.同频组网情况下,邻区的伪 ...

  9. AGC035 B - Even Degrees【思维·树形结构的妙用】

    题目传送门 一句话题意: 首先,每一条边会产生1个入度,1个出度,因此,如果边的数量是奇数的话,图的所有节点的总出度就是奇数,不可能每个节点的出度都是偶数,因此无解. 有解时,我们先找出原图中的一棵生 ...

  10. 【VS开发】【智能语音处理】VS中声音的采集实现

    vc中声音的采集是用api函数来实现的. 一.数字音频基础知识  Fourier级数:  任何周期的波形可以分解成多个正弦波,这些正弦波的频率都是整数倍.级数中其他正线波的频率是基础频率的整数倍.基础 ...