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. 20165330 预备作业3 Linux安装及学习

    虚拟机安装 在安装VirtualBox时我的电脑一直打不开官网的下载地址,还好后面有可以打开了,于是我顺利的下载好了VirtualBox.而在运行出现了以下错误: 错误1:点击创建虚拟机时出现了以下提 ...

  2. 【Python算法】哈希存储、哈希表、散列表原理

    哈希表的定义: 哈希存储的基本思想是以关键字Key为自变量,通过一定的函数关系(散列函数或哈希函数),计算出对应的函数值(哈希地址),以这个值作为数据元素的地址,并将数据元素存入到相应地址的存储单元中 ...

  3. oracle 归档空间满的解决办法

    问题现象: 通过命令提示符登陆数据库,一般提示“ora-03113:通信通道的文件结尾”错误,查看trace日志,可以看到详细信息.部分摘录如下(橙色部分给出了建议方案): Errors in fil ...

  4. Apache的访问控制

      目录配置段 注释不能写在指令后面,下面这样是不行的,应当换行,但为了阅读方便我就这么写了 Alias /dir/  "/var/www/html/admin"      #路径 ...

  5. restfull规范

    web服务交互 我们在浏览器中能看到的每个网站,都是一个web服务.那么我们在提供每个web服务的时候, 都需要前后端交互,前后端交互就一定有一些实现方案,我们通常叫web服务交互方案. 目前主流的三 ...

  6. 金融量化ushare模块

    一.介绍 Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,能够为金融分析人员提供快速.整洁.和多样的便于分析的数据,为他们 ...

  7. 19.Eclipse 修改默认的keystore签名文件

    Android开发中apk运行都需要签名,就算连接手机直接运行调试,apk都有签名,开发工具会有默认的debug_keyStore Eclipse ADT调试运行使用的是临时生成的Debug专用证书, ...

  8. python web中的文件上传与下载

    django 框架下 实现服务端的文件上传与下载: import jsonimport osimport uuid def attachment_upload(request): "&quo ...

  9. kettle转换添加hbase-output无法获取hbase表

    问题:kettle转换添加hbase-output无法获取hbase表 win本机安装kettle,本机虚拟机三台,root用户安装有jdk.zookeeper.hadoop.hbase kettle ...

  10. Check back what the kd 6 for more info

    Representing a shout-to his fans in China, the What the KD 6 may be the product of NIKEiD's Player E ...