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. Codeforces Round #426 (Div. 2)A题&&B题&&C题

    A. The Useless Toy:http://codeforces.com/contest/834/problem/A 题目意思:给你两个字符,还有一个n,问你旋转n次以后从字符a变成b,是顺时 ...

  2. POJ3660 传递闭包———floyd算法

    POJ3660 Cow Contest 题目链接:http://poj.org/problem?id=3660 题意:农名约翰有些奶牛,约翰通过让他们决斗来决定他们的排名,约翰让这些奶牛一对一打完一定 ...

  3. swift tableViewController

    tableViewController 控制器 import UIKit     class ViewController: UITableViewController {              ...

  4. 通过Nginx反向代理实现IP分流

    通过Nginx做反向代理来实现分流,以减轻服务器的负载和压力是比较常见的一种服务器部署架构.本文将分享一个如何根据来路IP来进行分流的方法. 根据特定IP来实现分流 将IP地址的最后一段最后一位为0或 ...

  5. 设计模式之——Template模板模式

    Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的 ...

  6. 剑指Offer——求1+2+3+...+n

    题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 分析: 递归实现. 代码: class So ...

  7. android shareSDK实现第三方分享

    一.  http://www.mob.com/  在mob官网注册账号,获取ShareSDK的appkey,下载shareSDK并解压. 二.进入ShareSDK解压目录,打开“Share SDK f ...

  8. 怎样在QML应用中创建一个Context Menu

    我们在非常多的系统中看见能够在屏幕的一个地方长按,然后就能够依据当前显示的上下文弹出一个菜单. 菜单中能够有一些选项,比方删除,改动该项.这样的一般在ListView或GridView中常见.今天,我 ...

  9. mytest3.py-api接入平台获取数据

    mytest3.py-api接入平台获取数据 import base64 import datetime import hashlib import urllib import urllib.pars ...

  10. table添加横向滚动条

    <div style="width:1000px; height:200px; overflow:scroll;"> <table border=" r ...