Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例)
Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例)
在完成winodws平台上的caffe环境的搭建之后,亟待掌握的就是如何在caffe中进行训练与学习,下面将进行简单的介绍。
1、数据库CIFAR-10的下载与介绍
CIFAR-10数据库的下载地址:http://www.cs.toronto.edu/~kriz/cifar.html
CIFAR-10数据库:
60000张32*32大小的彩色图像共计10类(airplane、automobile、 bird、cat 、deer、dog、frog、 horse、ship、truck)
每一类6000张
其中50000张用于训练
10000张用于测试
2、Windows平台上caffe的训练方法
2.1、解压缩数据库至相关路径
下载完成后,将其解压缩至.../caffe-master/data/cidar10/下,与get_cifar10.sh放在一起,其实./get_cifar10.sh命令的作用也就是“下载并解压缩”,只不过是linux环境下的而已。
可以看到,data_batch_1.bin、data_batch_2.bin、data_batch_3.bin、data_batch_4.bin和data_batch_5.bin包含了该数据库中的50000张共10类(每类5000张)彩色图像,是用于训练的,而test_batch_.bin中包含了10000张共10类(每类1000张)是用于测试的。
2.2、转换cifar数据库为leveldb格式的数据库
进入.../caffe-master/examples/cidar10/路径下,若是在linux下,则直接执行./create_cifar10.sh即可。
但是我们这里说的是windows环境,若windows平台上的caffe环境搭建成功(参考:http://blog.csdn.net/frd2009041510/article/details/52998786),执行F5后,会在caffe-master下生成一个Bulid文件夹,可以在.../caffe-master/Build/x64/Release/下面看到convert_cifar_data.exe(作用:转换为LEVELDB格式或LMDB格式,才能被caffe识别)和compute_image_mean.exe(作用:计算图像平均值)这两个可执行程序,它们就是转换cifar数据库为leveldb格式的数据库的命令。
注:caffe为什么采用LEVELDB格式或LMDB格式,而不是直接读取原始数据?
答:原因有二:一是数据类型多种多样,转换为统一格式可以简化数据读取层的实现;二是使用LEVELDB格式或LMDB格式可以提高磁盘IO利用率。
为了完成在windows环境下的数据库格式的转换,需要利用cmd进行dos命令的输入。
进入convert_cifar_data.exe所在的路径.../caffe-master/Build/x64/Release/,在cmd中执行:
convert_cifar_data.exe ../../../data/cifar10/ ../../../examples/cifar10 lmdb
命令执行完后可以在.../caffe-master/examples/cifar10/路径下面看到生成的两个文件夹cifar10_test_lmdb和cifar10_train_lmdb,它们分别是测试数据库和训练数据库对应的转换后的数据库。
接着,将db格式的训练图像进行求平均值,进入convert_cifar_data.exe所在的路径.../caffe-master/Build/x64/Release/,在cmd中执行:
compute_image_mean.exe -backend=lmdb ../../../examples/cifar10/cifar10_train_lmdb ../../../examples/cifar10/mean.binaryproto
命令执行完后可以在.../caffe-master/examples/cifar10/路径下面看到生成的mean.binaryproto。
2.3、模型描述与训练配置说明
该CNN由卷积层、POOLing层、非线性变换层以及在顶端的局部对比归一化线性分类器组成。
我们可以看到,在.../caffe-master/examples/cifar10/路径下有一堆*.prototxt,它们均是用来修改配置参数的。
由于我们所采用的平台没有英伟达的GPU,故只能采用CPU进行训练,所以将cifar10_quick_solver.prototxt和cifar10_quick_solver_lr1.prototxt中的solver_mode:GPU均改为solver_mode:CPU。这两个参数配置文件是用来协调模型的优化的,例如学习因子(learning rate)。
2.4、训练
训练或者测试时都要采用Release模式下的caffe.exe,进入.../caffe-master/Build/x64/Release/路径下,采用dos命令行,也就是执行cmd,执行下列命令:
caffe train --solver=../../../examples/cifar10/cifar10_quick_solver.prototxt
上述命令执行完毕后会生成cifar10_quick_iter_4000.caffemodel.h5以及cifar10_quick_iter_4000.solverstate.h5两个文件,其中cifar10_quick_iter_4000.solverstate.h5将在进一步的训练中使用到,而cifar10_quick_iter_4000.caffemodel.h5模型权值文件可用于数据集的测试(此处可不用,因为还有下面更深层的训练,会生成更深层的模型权值文件cifar10_quick_iter_5000.caffemodel.h5)。
接下来执行如下命令:
caffe train --solver=../../../examples/cifar10/cifar10_quick_solver_lr1.prototxt --snapshot=../../../examples/cifar10/cifar10_quick_iter_4000.solverstate.h5
上述命令执行完毕后会生成cifar10_quick_iter_5000.caffemodel.h5以及cifar10_quick_iter_5000.solverstate.h5两个文件,在此例子中,就是用cifar10_quick_iter_5000.caffemodel.h5模型权值文件进行预测的。
【必须注意的是】修改对应需要文件的路径(因为我们是在windows下执行的),否则会一直报错,可以根据报错内容修改对应的文件路径,需要修改的文件内容中的路径一般是cifar10_quick_solver.prototxt和cifar10_quick_solver_lr1.prototxt中的net以及snapshot_prefix对应的路径,还有cifar10_quick_train_test.prototxt中的mean_file和source对应的路径。
下面将对配置文件中的内容进行简单说明或解释:
net:用于训练、预测的网络描述文件
test_iter:预测阶段迭代次数
test_interval:训练时每迭代多少次,进行一次预测
base_lr、momentum、weight_delay:网络的基础学习速率、冲量和权衰量
lr_policy:学习速率的衰减策略
display:每经过多少次迭代,在屏幕上打印一次运行日志
max_iter:最大迭代次数
snapshot:每多少次迭代打印一次快照
solver_mode:caffe的求解模式,根据实际情况选择GPU或CPU
2.5、用训练好的模型进行预测
其实,预测就是用训练好的模型进行预测,对于此例子来说,就是使用cifar10_quick_iter_5000.caffemodel.h5模型权值文件进行预测的。
同理,对于windows平台,进入.../caffe-master/Build/x64/Release/路径下,采用dos命令行,也就是执行cmd,执行下列命令:
caffe test -model ../../../examples/cifar10/cifar10_quick_train_test.prototxt -weights ../../../examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5 -iterations 100
其中:
test :表示只做预测(前向传播计算),不进行参数更新(后向传播计算)
-model ../../../examples/cifar10/cifar10_quick_train_test.prototxt:指定模型描述文本文件
-weights ../../../examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5 :指定模型权值文件,也就是预先训练出来的模型或者说权值文件
-iterations 100:指定迭代的次数,也就是参与测试的样本数目。
根据测试结果,可以看出,采用cifar10_quick_iter_5000.caffemodel.h5模型权值文件进行预测时,准确率为0.75,采用cifar10_quick_iter_4000.caffemodel.h5模型权值文件进行预测时,准确率为0.7159,说明训练样本的多少与训练出来的模型还是有很大关系,这一点非常好理解,学得越多懂得也就越多,碰到新问题解决问题的能力就越强,与人一样。
Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例)的更多相关文章
- nginx 在windows平台上对asp.net做反向代理
代理服务器 当客户机向站点提出请求时,请求将转到代理服务器.然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器.内容服务器再通过该通道将结果回传给代理服务器.代理服务器将检索到的信 ...
- windows平台上MongoDB安装配置
我按照原文方法操作,无法连接mongod服务,可能哪里出了问题. 以下是小页的教程:https://www.cnblogs.com/littlepage/p/10992336.html 视频参考: ...
- 基于linux或windows平台上的c/s简单通信
linux: tcpclient.cpp #include<iostream> #include<unistd.h> #include<sys/types.h> # ...
- Windows平台上C++开发内存泄漏检查方法
充分的利用调试工具可以非常方便地避免内存泄漏问题. 这里介绍两种方法,互为补充,第一种是VC编译器提供的方法,第二种是专用的内存泄漏检查工具Memmory Validator.这两种方法的基本原理是一 ...
- windows平台上用python 远程线程注入,执行shellcode
// 转自: https://blog.csdn.net/Jailman/article/details/77573990import sys import psutil import ctypes ...
- Windows平台上的pip安装
写在前面 pip 是 Python 的包管理工具,在 Python 开发中必不可少.作为一名python菜鸟,本文在踩坑无数的基础上尽可能详细地解释pip的安装过程.在安装之前需要明确两点: 1.pi ...
- Linux平台上用C语言实现与MySQL数据库的连接
安装编译工具 ---- 这将安装gcc/g++/gdb/make 等基本编程工具: sudo apt-get install build-essential 输入命令"sudo apt-ge ...
- windows平台下的oracle ORA-01031的解决方法
今天下午遇到一个很怪异的问题,在windows平台下sqlplus / as sysdba登陆数据库,提示权限不足, 当时就纳闷了,sys用户登陆数据库还能权限不足,问题出现了,就开始寻找解决方法呗 ...
- OpenStack平台上,windows云主机可以ping通百度但是无法打开网页,部分其它网页可以打开
问题描述: 在OpenStack平台上的64位Windows7虚拟机,可以ping通百度,但是却无法打开百度网页. 于是,笔者又对其它网址进行的测试,发现淘宝.京东.携程部分网页可以打开,而新浪等等网 ...
随机推荐
- centos7常用命令集合
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] CentOS7 常用命令集合 这两天一直在对CentOS 7.2进行初体验,各种学习命令肿么用,不过其实大多和DOS是一 ...
- 演示一个简单的Redis队列
0.Windows Service版下载 https://github.com/rgl/redis/downloads 1.新建一个Console项目 打开Nuget控制台,执行以下命令 Instal ...
- mybatis调用oracle存储过程例子.
1.MYBATIS方法: <select id="getFlowNum" statementType="CALLABLE"> <![CDATA ...
- 最长回文---hdu3068 (回文串 manacher 算法模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意很清楚:就是求一个串s的子串中最长回文串的长度:这类题用到了manacher算法 #incl ...
- 使用selenium找出外卖点餐次数最多的10个顾客
大锅在做外卖,给我说能否统计出这半年点餐次数最多的10个顾客,我不知道APP本身是否有这个功能,想了下最近用selenium较多,就用selenium尝试下吧. 1 定义一个类,这里先描述需要的属性和 ...
- MongoDB学习笔记系列~目录
MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...
- PAT 1145 Hashing - Average Search Time [hash][难]
1145 Hashing - Average Search Time (25 分) The task of this problem is simple: insert a sequence of d ...
- Mysql—(1)—
sql语句 sql是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出“做什么”的命 ...
- python全栈开发从入门到放弃之初识面向对象
面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...
- python全栈开发从入门到放弃之面向对象反射
1.classmethod.staticmethod方法 classmethod类方法默认参数cls,可以直接用类名调用,可以与类属性交互 #student文件内容 宝宝,男 博博,女 海娇,男 海燕 ...