Caffe初试(二)windows下的cafee训练和测试mnist数据集
一、mnist数据集
mnist是一个手写数字数据库,由Google实验室的Corinna Cortes和纽约大学柯朗研究院的Yann LeCun等人建立,它有60000个训练样本集和10000个测试样本集。mnist数据库官方网址为:http://yann.lecun.com/exdb/mnist/ 。可直接下载四个解压文件,分别对应:训练集样本、训练集标签、测试集样本和测试集标签。解压缩之后发现,其是在一个文件中包含了所有图像。
二、caffe支持的数据格式:Lmdb和Leveldb
- 它们都是键/值对(Key/Value Pair)嵌入式数据库管理系统编程库。
- 虽然lmdb的内存消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允许多种训练模型同时读取同一组数据集。
- 因此lmdb取代了leveldb成为Caffe默认的数据集生成格式。
三、mnist数据集的处理
caffe并不能直接使用下载得到的四个文件进行训练,而是会把它转化为lmdb或leveldb格式进行读取。目前我使用的是leveldb格式。由于还没有具体研究如何将数据集向lmdb或leveldb格式转化,所以目前使用的是网盘下载的资源,链接如下:
http://pan.baidu.com/s/1c2G9qyk 提取码:xama。里面是已经经过转换的leveldb格式的训练集和测试集,将这两个文件夹直接放到\examples\mnist目录下,如下图所示:

四、训练caffe模型
训练caffe模型需要用到几个文件,首先是train_lenet.bat,打开看到其内容如下:

即该文件指定要使用lenet_solver.prototxt文件,那我们就看看该文件吧!

将最后一行solver_mode改为CPU;(为什么我不用GPU呢?后面再解释!)可以看出,这个文件是对网络训练参数进行指定:max_iter指定了最大迭代次数,默认为10000次,snapshot是输出中间结果,默认为迭代到5000次时输出中间结果。
文件的开头也指明了,使用lenet_train_test.prototxt文件指定的网络进行训练和测试。
打开lenet_train_test.prototxt,做如下修改以正确指定训练集和测试集。

其中source指定了mnist的训练集和测试集的文件夹所在路径,注意,此处是相对路径,这个很关键,原因后面再提!
backend指定了数据集的格式,使用的是leveldb。
之后,点击examples/mnist目录下的train_lenet.bat批处理文件,即可实现对mnist数据集的训练,train_lenet.bat文件内容为:
cd ../../
"caffe/bin/caffe.exe" train --solver=examples/mnist/lenet_solver.prototxt pause
意思为使用编译生成的caffe.exe进行训练,训练使用的解决策略由lenet_solver.prototxt来指定。
如果不出意外,等待一段时间后,即可得到如下界面:

可以看到,打印信息的格式是有规律的,

左侧是caffe采用的GLOG库内方法打印的信息,这个库主要起记录日志的功能,方便出现问题时查找根源,具体格式为:
[日期] [时间] [进程号] [文件名] [行号]
往右即为当前迭代次数以及损失值(训练过程不输出准确率accuracy)。

当看到Optimization Done字样时,说明模型训练完成。训练得到的模型存储在目录\examples\mnist下(后缀名为caffemodel和solverstate),如下图所示:

分别是训练至一半和训练最终完成后的模型。接下来即可用这模型对mnist的测试集进行测试。
五、mnist数据集的测试
编译生成的caffe.exe可以直接用于测试。在目录\examples\mnist下新建mnist_test.bat批处理文件,并写入如下内容:
cd ../../
caffe\bin\caffe.exe test --model=examples\mnist\lenet_train_test.prototxt -weights=examples\mnist\lenet_iter_10000.caffemodel
pause
意思是,首先是找到caffe.exe并运行->指定为测试模式->指定网络测试参数->指定模型。
运行mnist_test.bat,结果显示如下:

左侧的内容依旧是GLOG的记录日志,右侧中的Batch需要和网络参数初始中的batch_size一起理解。每个Batch中包含了batch_size张测试图片,所以每个Batch的准确率是对这batch_size张测试图片整体而言的。而不是对每张测试图片而言的。
六、遇到的问题
前面有提到两点,当时说在后面会解释。现在在该部分展开说明。
1、为什么我在解决策略文件lenet_solver.prototxt中,要将solver_mode改为CPU呢?
答:因为在我的机器中,solver_mode使用GPU的话,训练时出错,错误的提示如下:

Check failed: error == cudaSuccess < vs. > invalid argument
网上查了一下这个错误,给的最多的解释是:该错误是由显卡的计算能力不足导致的。
遇到这个问题的网友还是有的,但给出的解决方案我没有看懂,github上https://github.com/rbgirshick/rcnn/issues/28有一个解决方案:

I added the following lines to commands using multiple “arch” flags in Nvidia's NVCC compiler, and the error does not occur anymore. -gencode=arch=compute_20,code=\"sm_20,compute_20\" -gencode=arch=compute_30,code=\"sm_30,compute_30\" -gencode=arch=compute_35,code=\"sm_35,compute_35\" -gencode=arch=compute_50,code=\"sm_50,compute_50\"
网友说亲测能解决

但我不知道如何修改。
还有的网友说是要设置显卡的计算能力http://www.cnblogs.com/yymn/articles/5389904.html ,但我也不知道如何设置。
所以这个问题,暂时放在这里,待日后找到解决方法后再回来更新!
2、第二个问题之前的描述如下:

这个“相对路径”是相对于哪里呢?就是相对于你运行caffe.exe后,所处在的路径位置!再来回看一下我的mnist_test.bat内容吧

我在运行目录caffe\bin下的caffe.exe应用程序之前,已经执行了cd../../将我目前的路径返回上上层目录,我的目录结构如下图所示:

执行cd../../后,我来到了F:\caffe\目录下,此时,我在我的mnist_test.bat内能通过相对路径 examples\mnist\lenet_train_test.prototxt 找到网络参数描述文件,而且也能在lenet_train_test.prototxt中的source处指定的相对路径处,找到mnist测试集的文件夹所在位置:

这样来看,调用caffe.exe完成mnist数据集的测试过程中,其如何去找相关文件就很清楚了!
我犯的错误是:我之前在mnist_test.bat批处理文件写入的内容是:

可以看到,所有的路径我都是使用绝对路径,这是我为了防止调用错误特地难为自己的。但lenet_train_test.prototxt中,我在source指定的还是相对路径:
source:"examples\mnist\mnist_test_leveldb"
当时没想过会出错,可当我执行mnist_test.bat时,出现了

错误描述为:
Check failed: status.ok() Failed to open leveldb examples/mnist/mnist_test_leveldb
Invalid argument: examples/mnist/mnist_test_leveldb: does not exist (create_if_missing is false)
当时我在检查错误的时候,完全没想过是由于相对路径设置得不对导致的,一直在检查是不是我在mnist_test.bat中设置的路径有误,浪费了很多时间。
后面我无意打开lenet_train_test.prototxt 才发现,source指定的是相对路径,那这个相对路径是相对于哪个位置的呢?因为我的测试集所在路径为:

而source中为
那么我所处的位置应该要在F:\caffe\,这样我才能根据source找到测试集文件夹mnist_test_leveldb。
而我在mnist_test.bat中,并没有将我的位置定位到F:\caffe\ ,因为mnist_test.bat是在F:\caffe\examples\mnist\下的,若不将路径定位到F:\caffe\ ,则程序会根据source指定的相对路径,在F:\caffe\examples\mnist\下寻找
,而F:\caffe\examples\mnist\下根本不存在
这个路径,所以就会出现找不到文件夹mnist_test_leveldb的情况!
当然,如果在source中使用绝对路径来指定mnist_test_leveldb,即

再运行这个mnist_test.bat批处理文件:

就不会出错了!
运行的结果如下:

小结:
可能是我对文件路径的理解程度和敏感程度不够,常常会在路径问题上出错,或许在别人看来,这根本不是什么值得拿出来提及的问题,但于我而言,真的是浪费了很多时间在指定文件路径上。这一次使用caffe来测试mnist数据集,又一次浪费了很多时间在这个问题上!真是无语-。-|||
七、总结
虽然一路艰辛,但总算是把caffe用起来了!通篇下来,你会发现,我完全没有提及任何枯燥乏味的理论知识,连深度学习中最重要的卷积神经网络我也只字未提,可见caffe的确可以让一个完全不懂卷及神经网络原理的人通过不断手动调整参数完成学习,实现分类等目标,且取得的效果还不错。
当然这只是对于那些想试试caffe威力的人而言,真正要将caffe用于你的应用项目中,需要看懂caffe的每个模板,而之要求我们必须了解深度学习的理论知识。所以,要想取得实质性的突破,还有很长的路要走!
以上。
Caffe初试(二)windows下的cafee训练和测试mnist数据集的更多相关文章
- windows下使用caffe测试mnist数据集
在win10机子上装了caffe,感谢大神们的帖子,要入坑caffe-windows的朋友们看这里,还有这里,安装下来基本没什么问题. 好了,本博文写一下使用caffe测试mnist数据集的步骤. 1 ...
- coreseek实战(一):windows下coreseek的安装与测试
coreseek实战(一):windows下coreseek的安装与测试 网上关于 coreseek 在 windows 下安装与使用的教程有很多,官方也有详细的教程,这里我也只是按着官方提供的教程详 ...
- windows+caffe(四)——创建模型并编写配置文件+训练和测试
1.模型就用程序自带的caffenet模型,位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件,复制到myfile文件夹内 2. 修改solver. ...
- (二)windows下安装PHPCMS V9
一.准备工作 搭建环境 :参考:Windows下搭建PHP开发环境及相关注意事项 PHPCMS V9 :下载适合自己 PHPCMS V9 版本到本地或服务器,下载地址:http://www.phpcm ...
- caffe搭建以及初步学习--win7-vs2013-gtx650tiboost-cuda8.0-cifar10训练和测试-2-快速解决方案cifar10_quick_solver.prototxt
首先安装好显卡----已经装好了?喜大普奔!没装好?那就用cpu,也是一样的. 拷贝cudnn v5.0 头文件和库文件以及执行文件到cuda8中 -------------------------- ...
- caffe学习系列(2):训练和测试自己的图片
参考:http://www.cnblogs.com/denny402/p/5083300.html 上述主要介绍的是从自己的原始图片转为lmdb数据,再到训练.测试的整个流程(另外可参考薛开宇的笔记) ...
- Windows下的Memcache安装与测试教程
Windows下的Memcache安装 1.下载memcache for windows. 下载地址:http://splinedancer.com/memcached-win32/,推荐下载bina ...
- windows下fitness python版本安装测试
FitNesse介绍¶ FitNesse是一套软件开发协作工具. 伟大的软件需要协作和交流,FitNesse可以帮助大家加强软件开发过程中的协作.能够让客户.测试人员和开发人员了解软件要做成什么样,自 ...
- caffe搭建以及初步学习--win7-vs2013-gtx650tiboost-cuda8.0-cifar10训练和测试-2-完整解决方案cifar10_full_solver.prototxt
首先总结前一节的内容. 简单的讲,就是训练并测试了快速解决方案. 转换数据格式: convert_cifar_data.exe data/cifar10 examples/cifar10 lmdb 计 ...
随机推荐
- URL类
java.net.URL类是对统一资源定位符(如http://www.lolcats.com)的抽象.它扩展了java.lang.Object,是一个final类.它采用策略模式,协议处理器(prot ...
- Matplotlib 学习笔记
注:该文是上了开智学堂数据科学基础班的课后做的笔记,主讲人是肖凯老师. 数据绘图 数据可视化的原则 为什么要做数据可视化? 为什么要做数据可视化?因为可视化后获取信息的效率高.为什么可视化后获取信息的 ...
- 下载imagenet2012数据集
摸索了一下,imagenet2012下载,跟大家分享一下 用迅雷会员加速都可以下载,有的用百度云也可以离线下载 http://www.image-net.org/challenges/LSVRC/20 ...
- Gulp和Webpack工具的区别
引用知乎的回答:https://www.zhihu.com/question/37020798 怎么解释呢?因为 Gulp 和 browserify / webpack 不是一回事 Gulp应该和Gr ...
- COGS461. [网络流24题] 餐巾
[问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...
- SQL Server数据库常用函数
好久没学习新知识了.今天学了下sql的一些常用语句.人还是需要不断学习进步的 否则只能停滞不前. 先从最简单的一句开始说起吧. select *from 表名 这里*的含义 表示了表的各字段,以逗号隔 ...
- 【Beta】第五次任务发布
PM #100 日常管理&dev版宣传&设计报告管理后台. 后端 #101 完成收藏功能 完成管理员权限表的生成和接入(按位压缩权限表) 验收条件:收藏功能能够正常使用.能够区分常规用 ...
- HTTP协议 -- 认清协议常用状态码
HTTP协议作为web服务的基础,理所应当受到重视,但是周围的同事能够讲清楚HTTP协议的凤毛麟角.既然是基础,就应该早一点掌握,所以近半年(2016-2月——2016年6月),不准备学习新技术了.首 ...
- SQL 事务回滚
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服 ...
- BZOJ3168: [Heoi2013]钙铁锌硒维生素
设$A^TC=B^T$,这样$C_{ij}$表示$B_j$的线性表出需要$A_i$,那么$B_j$可以替换$A_i$,根据$C=(A^T)^{-1}B^T$求出$C$.要求字典序最小完美匹配,先求任意 ...