一. 装完caffe当然要来跑跑自带的demo,在examples文件夹下。

先来试试用于手写数字识别的mnist,在 examples/mnist/ 下有需要的代码文件,但是没有图像库。

mnist库有50000个训练样本,10000个测试样本,都是手写数字图像。

  caffe支持的数据格式为:LMDB  LEVELDB

  IMDB比LEVELDB大,但是速度更快,且允许多种训练模型同时读取同一数据集。

  默认情况,examples里支持的是IMDB文件,不过你可以修改为LEVELDB,后面详解。

  mnist数据集建议网上搜索下载,网盘有很多,注意将文件夹放到\examples\mnist目录下,且最好命名为图中格式,

否则可能无法读取文件需手动配置。

  笔者之前下的数据集命名的下划线是连接线就会报错无法读取文件,所以注意文件夹名字!

Windows下最好选择LEVELDB文件,Linux则随意了。下好了LEVELDB文件就不用再使用convert_imageset函数了,省去了转换图片格式和计算均值的步骤。

  二. 训练mnist模型

  mnist的网络训练模型文件为: lenet_train_test.prototxt

name: "LeNet"
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
}
data_param {
source: "examples/mnist/mnist_train_leveldb"
batch_size:
backend: LEVELDB
}
}
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
scale: 0.00390625
}
data_param {
source: "examples/mnist/mnist_test_leveldb"
batch_size:
backend: LEVELDB
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult:
}
param {
lr_mult:
}
convolution_param {
num_output:
kernel_size:
stride:
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size:
stride:
}
}
layer {
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
param {
lr_mult:
}
param {
lr_mult:
}
convolution_param {
num_output:
kernel_size:
stride:
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "pool2"
type: "Pooling"
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size:
stride:
}
}
layer {
name: "ip1"
type: "InnerProduct"
bottom: "pool2"
top: "ip1"
param {
lr_mult:
}
param {
lr_mult:
}
inner_product_param {
num_output:
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "relu1"
type: "ReLU"
bottom: "ip1"
top: "ip1"
}
layer {
name: "ip2"
type: "InnerProduct"
bottom: "ip1"
top: "ip2"
param {
lr_mult:
}
param {
lr_mult:
}
inner_product_param {
num_output:
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "accuracy"
type: "Accuracy"
bottom: "ip2"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}

一般修改两个DATA层的 “source”文件路径就行,上面的例子中,我已经改了,改为mnist的训练集和测试集文件夹路径。再就是注意“backend: LEVELDB”,默认的backend应该是IMDB要修改!

  网络模型 lenet_train_test.prototxt修改后再修改 lenet_solver.prototxt

该文件主要是一些学习参数和策略:

  

 # The train/test net protocol buffer definition
net: "examples/mnist/lenet_train_test.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size and test iterations,
# covering the full , testing images.
test_iter:
# Carry out testing every training iterations.
test_interval:
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every iterations
display:
# The maximum number of iterations
max_iter:
# snapshot intermediate results
snapshot:
snapshot_prefix: "examples/mnist/lenet"
# solver mode: CPU or GPU
solver_mode: CPU

带#的注释可以不管,能理解最好:

  第二行的 net:  路径需改为自己的网络模型xx_train_test.prototxt路径。其他的学习率 base_lr,lr_policy等不建议修改;max_iter最大迭代次数可以稍微改小,display显示间隔也可以随意修改~最后一行,我是只有CPU模式所以设为CPU,如果可以用GPU加速可设为GPU!

  到这基本设置就结束了,然后就是写命令执行测试程序了:

我选择写了批处理.bat文件执行,也可以直接在CMD环境输命令执行。

  新建mnist_train.bat,内容如下:

cd ../../
"Build/x64/Debug/caffe.exe" train --solver=examples/mnist/lenet_solver.prototxt
pause

根据自己的情况修改第二行的路径位置,Windows应该都是在Build/x64目录下,有的博客写的/bin/目录其实是Linux的并不适用于Windows环境。还要注意使用斜线“/”,不要使用“\”无法识别,Python代码多为后者要修改!

我的环境只有Debug目录,如果你有Realease目录,使用Realease目录。

运行.bat成功后,会开始训练,训练结束界面如下:

  最后几行可以看到accuracy的准确率可以达到99%,也是相当准确了!

提示,caffe文件夹内会生成.caffemodel文件

使用caffemodel文件开始测试:

  三.测试数据

  由于测试数据集也是直接下载好了的LEVELDB文件,所以省了不少步骤

  直接新建mnist_test.bat文件,类似训练mnist模型一样,对该模型进行数据测试。  

cd ../../
"Build/x64/Debug/caffe.exe" test --model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel
pause

  类似mnits_train.bat,修改文件路径名,test表示用于测试,model指向自己的网络模型文件,最后添加权值文件.caffemodel进行测试。

  运行mnist_test.bat后,成功界面如下:

  

  最后一行还是有98%的准确率还是很不错的,说明模型生成的还不错。

  

总结:其实还遇到了不少零零碎碎的问题,大多都可以百度解决,主要是记得修改对自己的文件路径目录,Windows下一定要使用LEVELDB数据文件,.prototxt也记得修改,然后就是等待模型跑完看结果了,看到高准确率还是很开心的~

  四. 使用该模型

  模型训练好了,数据也只是测试了,那么我们要使用该模型判断一张图片是数字几该如何做呢?

这个时候需要生成 classification.exe,然后执行相应的.bat命令来预测图片的分类结果。

  mnist分类使用可以参考http://www.cnblogs.com/yixuan-xu/p/5862657.html

  发现OpenCV可以加载caffe 框架模型,准备再写一篇博客进行实践介绍~

http://docs.opencv.org/3.1.0/d5/de7/tutorial_dnn_googlenet.html

Windows caffe 跑mnist实例的更多相关文章

  1. 用caffe跑自己的数据,基于WINDOWS的caffe

    本文详细介绍,如何用caffe跑自己的图像数据用于分类. 1 首先需要安装过程见 http://www.cnblogs.com/love6tao/p/5706830.html 同时依据上面教程,生成了 ...

  2. 运行caffe自带的mnist实例教程

    运行caffe自带的mnist实例教程 本文结合几篇博文总结下来的,附上其中一篇原博文链接以供参考:http://blog.sina.com.cn/s/blog_168effc7e0102xjr1.h ...

  3. caffe mnist实例 --lenet_train_test.prototxt 网络配置详解

    1.mnist实例 ##1.数据下载 获得mnist的数据包,在caffe根目录下执行./data/mnist/get_mnist.sh脚本. get_mnist.sh脚本先下载样本库并进行解压缩,得 ...

  4. Windows下用Caffe跑自己的数据(遥感影像)

    1 前言 Caffe对于像我这样的初学者来说是一款非常容易上手的深度学习框架.关于用Caffe跑自己的数据这样的博客已经非常多,感谢前辈们为我们提供的这么好的学习资源.这里我主要结合我所在的行业,说下 ...

  5. windows下使用caffe测试mnist数据集

    在win10机子上装了caffe,感谢大神们的帖子,要入坑caffe-windows的朋友们看这里,还有这里,安装下来基本没什么问题. 好了,本博文写一下使用caffe测试mnist数据集的步骤. 1 ...

  6. Windows+Caffe+VS2013+python接口配置过程

    前段时间在笔记本上配置了Caffe框架,中间过程曲曲折折,但由于懒没有将详细过程总结下来,这两天又在一台配置较高的台式机上配置了Caffe,配置时便非常后悔当初没有写到博客中去,现已配置好Caffe, ...

  7. caffe 试运行MNIST

    转自:http://www.cnblogs.com/NanShan2016/p/5469942.html 编译完caffe后,在D:\caffe\caffe-master\caffe-master\b ...

  8. mxnet实战系列(一)入门与跑mnist数据集

    最近在摸mxnet和tensorflow.两个我都搭起来了.tensorflow跑了不少代码,总的来说用得比较顺畅,文档很丰富,api熟悉熟悉写代码没什么问题. 今天把两个平台做了一下对比.同是跑mn ...

  9. Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)

    基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html  摘要 在前面的博文中,我详细介绍了Caf ...

随机推荐

  1. 磁盘IO的性能指标 阻塞与非阻塞、同步与异步 I/O模型

    磁盘IO的性能指标 - 蝈蝈俊 - 博客园https://www.cnblogs.com/ghj1976/p/5611648.html 阻塞与非阻塞.同步与异步 I/O模型 - 蝈蝈俊.net - C ...

  2. Mac之日常操作

    1.创建root用户使用最高权限 sudo passwd root 一般情况下,使用临时获取最高权限 sudo vim /etc/shells 2. apache操作 #启动Apache sudo a ...

  3. Java并发编程:volatile关键字解析(转载)

    转自https://www.cnblogs.com/dolphin0520/p/3920373.html Java并发编程:volatile关键字解析   Java并发编程:volatile关键字解析 ...

  4. Android NDK(C++) 双进程守护

    双进程守护如果从进程管理器观察会发现新浪微博.支付宝和QQ等都有两个以上相关进程,其中一个就是守护进程,由此可以猜到这些商业级的软件都采用了双进程守护的办法. 什么是双进程守护呢?顾名思义就是两个进程 ...

  5. Flask上下文管理、session原理和全局g对象

    一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能, ...

  6. python 实现聊天室

    所用模块 asyncore 官方介绍, 源码 英文捉鸡点 这里  源码中可以看到其实本质上就对 select 以及 socket 的进一步封装 简单说明 Python的asyncore模块提供了以异步 ...

  7. 后缀自动机(SAM)学习笔记

    目录 定义 SAM 的状态集 一些性质 SAM 的后缀链接 SAM 的转移函数 一些性质 算法构造 构造方法 时间复杂度证明 状态的数量 转移的数量 代码实现 实际应用 统计本质不同的子串个数 计算任 ...

  8. 状压DP天秀

    状压DP,依靠的是把状态用某种压缩方式表示出来进而DP,大多数时候是二进制状压. 直接看例题吧. 一双木棋     九尾狐吃棉花糖     islands and bridges 愤怒的小鸟   芯片 ...

  9. SQL Server 2008还原数据库时出现“备份集中的数据库备份与现有的数据库不同”的解决方法

    引言 现在在做项目,由于每个人是分模块的,所以大家的测试数据都不同步,导致好多时候会因为别人填的数据不同而调半天的错.所以我还是自己还原一个数据库,自己填自己的数据吧. 报错 之前还原过很多个数据库都 ...

  10. 金融量化分析【day113】:多因子选股

    一.什么是多因子选股 在股市中征战过的朋友们应该知道,股市之道无非三点.1择时,2选股,3 仓控.精通这三点中的任何一点,都足以在股市中所向披靡.但是精通二字何其艰难!!!矫情的话多不多说,咱们进入正 ...