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通百度,但是却无法打开百度网页. 于是,笔者又对其它网址进行的测试,发现淘宝.京东.携程部分网页可以打开,而新浪等等网 ...
随机推荐
- Ubuntu16.4下RStudio1.1.447 中文输入问题的解决方案
Ubuntu16.4下RStudio1.1.447 中文输入问题的解决方案参照:https://blog.csdn.net/matteoshenl/article/details/78603528 R ...
- Hadoop伪分布安装详解(五)
目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...
- However, a general purpose protocol or its implementation sometimes does not scale very well.
https://netty.io/wiki/user-guide-for-4.x.html The Problem Nowadays we use general purpose applicatio ...
- 【JVM】程序调优
现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 .... ...
- 目标检测-Faster R-CNN
[目标检测]Faster RCNN算法详解 Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with r ...
- (3.14) set statistics io/time/profile /SET SHOWPLAN_ALL ON详解统计信息与执行计划
SQL Server读懂语句运行的统计信息 SET STATISTICS TIME IO PROFILE ON 执行计划详细描述请参考(读懂执行计划) 对于语句的运行,除了执行计划本身,还有一些其他 ...
- spring MVC学习(一)---前端控制器
1.spring MVC中的前段控制器就是DsipatcherServlet,它在spring MVC框架中的结构图如下: 2.DispatcherServlet其实就是一个Servlet,它继承了H ...
- JDK动态代理实现源码分析
JDK动态代理实现方式 在Spring框架中经典的AOP就是通过动态代理来实现的,Spring分别采用了JDK的动态代理和Cglib动态代理,本文就来分析一下JDK是如何实现动态代理的. 在分析源码之 ...
- PHP面试专用笔记精简版
[PHP笔记] 1.require 遇到即包含文件,require_once 只包含一次.require 遇到错误会终止,一般放在程序的最前面:include遇到错误会继续执行,一般放在流程控制语句中 ...
- mysql构建一张百万级别数据的表信息测试
表信息: CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(2 ...