数据集背景:

MNIST 是一个大型的手写体数字数据库,广泛应用于机器学习领域的训练和测试,由纽约大学Yann LeCun教授整理。

MNIST包括60000个训练集和10000测试集,图片固定尺寸为28*28。

LeNet模型背景:

LeNet是1986提出的,是最简单的CNN(卷积神经网路)模型,也是Caffe自带的第一个小例子用到模型。

所以综上,不难看出【在MNIST手写体数据集上用Caffe框架训练LeNet模型】简直就是深度学习届的helloworld啊哈哈哈

废话说完,看下Caffe官方给出的第一个小例子是怎么跑起来的。

第一步:下载MNIST数据集

大Caffe已经给我们写好了下载脚本,直接执行就是:

1
sudo  sh data /mnist/get_mnist .sh

当然可以用Vim打开看一下啦,主要是一些wget下载命令和gunzip解压命令啦O(∩_∩)O~

运行成功后,在 data/mnist/目录下多出了四个文件,这四个文件便是MNIST原始数据文件啦。

train-images-idx3-ubyte:  训练集样本 (9912422 bytes)

train-labels-idx1-ubyte:  训练集对应标注 (28881 bytes)

t10k-images-idx3-ubyte:   测试集图片 (1648877 bytes)

t10k-labels-idx1-ubyte:   测试集对应标注 (4542 bytes)

第二步:数据格式转换

当然上面的原始数据格式为二进制文件,是不能在caffe中直接使用的,需要转换成Caffe可以识别的格式LMDB或者LEVELDB才行。

继续执行脚本咯:

1
sudo  sh examples /mnist/create_mnist .sh

如果想运行leveldb数据,请运行 examples/siamese/ 文件夹下面的程序,examples/mnist/ 文件夹是运行lmdb数据。两个都可以,反正当初在搭建环境的时候,这两个依赖包都安装过了。转换成功后,会在 examples/mnist/目录下,生成两个文件夹,分别是mnist_train_lmdb(训练集)和mnist_test_lmdb(测试集),里面存放的data.mdb和lock.mdb,就是我们需要的运行数据。

PS:至于为什么不直接读取原始数据,非要采用LMDB、LEVELDB呢?主要有两个原因:

1、原始数据类型多种多样,不可能用一套代码来搞定,转换是为了更好的统一,以简化读取层的实现;

2、使用LMDB、LEVELDB可以提高磁盘IO利用率。

第三步:开始训练模型

一切准备就绪后,开始训练。依然范特。。不对,依然脚本伺候:

1
sudo  sh examples /mnist/train_lenet .sh

等下,本宝热爱学习,我想看下脚本里面写的什么,用vi打开后发现:

1
2
#!/usr/bin/env sh
. /build/tools/caffe  train --solver=examples /mnist/lenet_solver .prototxt

可见啊,该脚本是调用了前面编译好的build/tools/caffe.bin二进制文件,参数--solver=examples/mnist/lenet_solver.prototxt  则是指定了训练超参数文件文件。

打开它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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 100 and 100 test iterations,
# covering the full 10,000 testing images. // 一共10000张测试图像,test batch size 100 每次测试处理100张
test_iter: 100   //  进行100次前向计算,test_iter* test  batch size =10000
# Carry out testing every 500 training iterations.
test_interval: 500  //  每训练500次,进行一次测试
# 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 100 iterations
display: 100    // 迭代100次 打印输出一次结果
# The maximum number of iterations
max_iter: 10000    // 最大迭代数
# snapshot intermediate results
snapshot: 5000      //5000 次迭代保存一次临时模型,名称为lenet_iter_5000.caffemodel
snapshot_prefix:  "examples/mnist/lenet"
# solver mode: CPU or GPU // 使用CPU还是GPU
solver_mode: GPU    // 打开GPU

根据参数的意思再结合自己的情况,修改之。尤其是最后一句,如果没有显卡就老老实实的修改成CPU模式吧。

终于可以训练了,好鸡动:

1
sudo  sh examples /mnist/train_lenet .sh

大概20分钟吧,时间会给你好味道O(∩_∩)O~

第四步:用训练好的模型对数据进行预测

最终训练好的模型的权值保存在 examples/mnist/lenet_iter_10000.caffemodel 文件中,训练状态保存在 examples/mnist/lenet_iter_10000.solverstate 文件中。

下面开始利用训练好的LeNet模型权值文件对测试集进行预测:

1
2
3
4
. /build/tools/caffe  test 
-model examples /mnist/lenet_train_test .prototxt 
-weights examples /mnist/lenet_iter_10000 .caffemodel 
-iterations 100

OK,静等实验结果吧,最终识别率为99%。

总结:通过跑Caffe自带的这个小例子让我大致了解了Caffe的工作流程。

参考资料:

1、http://blog.csdn.net/wangchuansnnu/article/details/44341753

2、http://www.cnblogs.com/denny402/p/5075490.html

3、http://caffe.berkeleyvision.org/gathered/examples/mnist.html

4、http://blog.csdn.net/xbinworld/article/details/45619685

5、《深度学习-21天实战Caffe》 赵永科

奔跑吧Caffe(在MNIST手写体数字集上用Caffe框架训练LeNet模型)相关推荐

  1. Windows下Caffe的学习与应用(二)——优化自己训练的模型(fine-tuning)

    前言 在前面的博文中,我们也看到,在进行训练的样本比较少,每个种类的样本只有120张,迭代次数为100代,训练得到的模型在测试那些特征不那么明显图像时,准确率达不到我们想要的效果.如果下图: 测试的结 ...

  2. TensorRT(2)-基本使用:mnist手写体识别

    结合 tensorRT官方给出的一个例程,介绍tensorRT的使用. 这个例程是mnist手写体识别.例程位于目录: /usr/src/tensorrt/samples/sampleMNIST 文件 ...

  3. win10caffe-GPU环境配置+mnist手写体训练以及python接口导入详细教程(一步成功)

    什么是caffe Caffe是一个深度学习框架,具有表达力强.速度快和模块化的思想,由伯克利视觉学习中心(BVLC)和社区贡献者开发.Yangqing Jia在加州大学伯克利分校攻读博士期间创建了这个 ...

  4. 使用netron对TensorFlow、Pytorch、Keras、PaddlePaddle、MXNet、Caffe、ONNX、UFF、TNN、ncnn、OpenVINO等模型的可视化

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 使用netron对TensorFlow.Pytorch.Keras.PaddlePaddle.MXNet.Caffe.O ...

  5. 手写数字集MNIST(1)下载

    ML界的Hello World:手写数字集MNIST(1)下载 下载.显示MNIST数据集 import tensorflow as tf import matplotlib.pyplot as pl ...

  6. pytorch实现手写数字识别_Paddle和Pytorch实现MNIST手写数字集识别对比

    一.简介 1. Paddle PaddlePaddle是百度自主研发的集深度学习核心框架.工具组件和服务平台为一体的技术领先.功能完备的开源深度学习平台,有全面的官方支持的工业级应用模型,涵盖自然语言 ...

  7. TensorRT(3)-C++ API使用:mnist手写体识别

    本节将介绍如何使用tensorRT C++ API 进行网络模型创建. 1 使用C++ API 进行 tensorRT 模型创建 还是通过 tensorRT官方给的一个例程来学习. 还是mnist手写 ...

  8. numpy实现神经网络代码(mnist手写体识别)

    实现四层神经网络,如下图: 反向传播原理: "反向传播算法"过程及公式推导(超直观好懂的Backpropagation)_aift的专栏-CSDN博客_反向传播算法 使用SGD(小 ...

  9. Tensorflow 改进的MNIST手写体数字识别

    上篇简单的Tensorflow解决MNIST手写体数字识别可扩展性并不好.例如计算前向传播的函数需要将所有的变量都传入,当神经网络的结构变得复杂.参数更多时,程序的可读性变得非常差.而且这种方式会导致 ...

最新文章

  1. python闭包和函数调用区别_函数闭包与可调用类
  2. iview的表格自定义_Vue中使用iview-UI表格样式修改和使用自定义模板数据渲染相关...
  3. oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)
  4. ActiveMq使用笔记
  5. JS关键字和保留字汇总(小记)
  6. Keras同时用多张显卡训练网络
  7. 远程控制slam小车及pid调试PC与树莓派ssh链接时出现间歇性联通段开网络故障acailable I Destination Host Unreachable_然后5s后切换了一个地图
  8. python html解析对比_python htmlparse页面解析示例
  9. git clone 失败_鲜为人知的Git功能——Git Worktree工作树
  10. PLSQL Developer 安装使用教程详解
  11. ISSCC 2017论文导读 Session 14:A 288μW Programmable Deep-Learning Processor with 270KB On-Chip Weight
  12. 3cdaemon漏洞挖掘 Exploit
  13. 华为ME909s-821模块电信卡发短信问题
  14. 虚拟机无法连接到图形服务器,vmware vsphere client无法连接到服务器
  15. java微服务案例分析_《Java深入微服务原理改造房产销售平台》知识点梳理与问答总结...
  16. 物联网专业本科毕业论文选题
  17. mint-ui —— checklist的使用
  18. 上市公司内控信息披露指数(2000-2018年)
  19. 读研的那些事儿(三)
  20. 怎么用ip查看服务器文件共享,怎么查看已知IP下的共享文件夹!~

热门文章

  1. 01 Hive SQL基础知识
  2. 前端发展历程与技术应用概述
  3. 饭局上领导说“我的酒你敢不喝”,别说“我过敏”,这3句话管用
  4. strncmp的介绍
  5. 底层用python、前台用什么_底的解释|底的意思|汉典“底”字的基本解释
  6. ssh远程执行命令 linux,Linux下使用SSH远程执行命令方法收集
  7. 老板叫我把几十万条Excel数据录入系统
  8. 常用数据结构:线性结构
  9. 深入理解Android系统多用户机制
  10. 谷歌云端硬盘 文件:复制