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为例)的更多相关文章

  1. nginx 在windows平台上对asp.net做反向代理

    代理服务器 当客户机向站点提出请求时,请求将转到代理服务器.然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器.内容服务器再通过该通道将结果回传给代理服务器.代理服务器将检索到的信 ...

  2. windows平台上MongoDB安装配置

    我按照原文方法操作,无法连接mongod服务,可能哪里出了问题. 以下是小页的教程:https://www.cnblogs.com/littlepage/p/10992336.html  视频参考: ...

  3. 基于linux或windows平台上的c/s简单通信

    linux: tcpclient.cpp #include<iostream> #include<unistd.h> #include<sys/types.h> # ...

  4. Windows平台上C++开发内存泄漏检查方法

    充分的利用调试工具可以非常方便地避免内存泄漏问题. 这里介绍两种方法,互为补充,第一种是VC编译器提供的方法,第二种是专用的内存泄漏检查工具Memmory Validator.这两种方法的基本原理是一 ...

  5. windows平台上用python 远程线程注入,执行shellcode

    // 转自: https://blog.csdn.net/Jailman/article/details/77573990import sys import psutil import ctypes ...

  6. Windows平台上的pip安装

    写在前面 pip 是 Python 的包管理工具,在 Python 开发中必不可少.作为一名python菜鸟,本文在踩坑无数的基础上尽可能详细地解释pip的安装过程.在安装之前需要明确两点: 1.pi ...

  7. Linux平台上用C语言实现与MySQL数据库的连接

    安装编译工具 ---- 这将安装gcc/g++/gdb/make 等基本编程工具: sudo apt-get install build-essential 输入命令"sudo apt-ge ...

  8. windows平台下的oracle ORA-01031的解决方法

    今天下午遇到一个很怪异的问题,在windows平台下sqlplus  / as sysdba登陆数据库,提示权限不足, 当时就纳闷了,sys用户登陆数据库还能权限不足,问题出现了,就开始寻找解决方法呗 ...

  9. OpenStack平台上,windows云主机可以ping通百度但是无法打开网页,部分其它网页可以打开

    问题描述: 在OpenStack平台上的64位Windows7虚拟机,可以ping通百度,但是却无法打开百度网页. 于是,笔者又对其它网址进行的测试,发现淘宝.京东.携程部分网页可以打开,而新浪等等网 ...

随机推荐

  1. centos7常用命令集合

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   CentOS7 常用命令集合 这两天一直在对CentOS 7.2进行初体验,各种学习命令肿么用,不过其实大多和DOS是一 ...

  2. 演示一个简单的Redis队列

    0.Windows Service版下载 https://github.com/rgl/redis/downloads 1.新建一个Console项目 打开Nuget控制台,执行以下命令 Instal ...

  3. mybatis调用oracle存储过程例子.

    1.MYBATIS方法: <select id="getFlowNum" statementType="CALLABLE"> <![CDATA ...

  4. 最长回文---hdu3068 (回文串 manacher 算法模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意很清楚:就是求一个串s的子串中最长回文串的长度:这类题用到了manacher算法 #incl ...

  5. 使用selenium找出外卖点餐次数最多的10个顾客

    大锅在做外卖,给我说能否统计出这半年点餐次数最多的10个顾客,我不知道APP本身是否有这个功能,想了下最近用selenium较多,就用selenium尝试下吧. 1 定义一个类,这里先描述需要的属性和 ...

  6. MongoDB学习笔记系列~目录

    MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...

  7. 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 ...

  8. Mysql—(1)—

    sql语句 sql是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出“做什么”的命 ...

  9. python全栈开发从入门到放弃之初识面向对象

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  10. python全栈开发从入门到放弃之面向对象反射

    1.classmethod.staticmethod方法 classmethod类方法默认参数cls,可以直接用类名调用,可以与类属性交互 #student文件内容 宝宝,男 博博,女 海娇,男 海燕 ...