一. 装完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. CentOS自定义快捷键,以终端为例

    和Ubuntu不同的是,CentOS默认情况下没有Terminal的快捷键.因此,用户需要自定义. 具体操作: 一.打开设置,搜索keyboard 二.点击+号定义快捷键 名称随意填,查询终端程序所在 ...

  2. Java socket详解(转)

    一:socket通信基本原理. 首先socket 通信是基于TCP/IP 网络层上的一种传送方式,我们通常把TCP和UDP称为传输层. 如上图,在七个层级关系中,我们将的socket属于传输层,其中U ...

  3. Shell命令-文件及内容处理之head、tail

    文件及内容处理 - head.tail 1. head:显示文件内容头部 head命令的功能说明 head 命令用于显示文件头部内容,默认执行 head 命令会输出文件开头的 10 行. head命令 ...

  4. golang函数

    一.函数语法 func 函数名(形参列表) (返回值列表){ ...... return 返回值 } 例如: package main import "fmt" func test ...

  5. Python——爬虫——数据提取

    一.XML数据提取 (1)定义:XML指可扩展标记语言.标记语言,标签需要我们自行定义 (2)设计宗旨:是传输数据,而非显示数据,具有自我描述性 (3)节点关系:   父:每个元素及属性都有一个父. ...

  6. iOS Button添加阴影 和 圆角

    用iamgeview 加手势代替 self.headimageview = [[UIImageView alloc] initWithFrame:CGRectMake(IPHONEWIDTH(13), ...

  7. ORM基础之ORM介绍和基础操作

    一.ORM介绍 1.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过 ...

  8. 皮尔逊相关系数与余弦相似度(Pearson Correlation Coefficient & Cosine Similarity)

    之前<皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)>一文介绍了皮尔逊相关系数.那么,皮尔逊相关系数(Pearson Corre ...

  9. [FJOI2016]建筑师

    题目描述 小 Z 是一个很有名的建筑师,有一天他接到了一个很奇怪的任务:在数轴上建 n 个建筑,每个建筑的高度是 1 到 n 之间的一个整数. 小 Z 有很严重的强迫症,他不喜欢有两个建筑的高度相同. ...

  10. usb输入子系统写程序(三)

    目录 usb输入子系统写程序 小结 内核修改 怎么写代码 类型匹配 probe disconnect 程序设计 1th匹配probe 2th 获取usb数据 3th 输入子系统上报按键 title: ...