奔跑吧Caffe(在MNIST手写体数字集上用Caffe框架训练LeNet模型)
数据集背景:
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模型)相关推荐
- Windows下Caffe的学习与应用(二)——优化自己训练的模型(fine-tuning)
前言 在前面的博文中,我们也看到,在进行训练的样本比较少,每个种类的样本只有120张,迭代次数为100代,训练得到的模型在测试那些特征不那么明显图像时,准确率达不到我们想要的效果.如果下图: 测试的结 ...
- TensorRT(2)-基本使用:mnist手写体识别
结合 tensorRT官方给出的一个例程,介绍tensorRT的使用. 这个例程是mnist手写体识别.例程位于目录: /usr/src/tensorrt/samples/sampleMNIST 文件 ...
- win10caffe-GPU环境配置+mnist手写体训练以及python接口导入详细教程(一步成功)
什么是caffe Caffe是一个深度学习框架,具有表达力强.速度快和模块化的思想,由伯克利视觉学习中心(BVLC)和社区贡献者开发.Yangqing Jia在加州大学伯克利分校攻读博士期间创建了这个 ...
- 使用netron对TensorFlow、Pytorch、Keras、PaddlePaddle、MXNet、Caffe、ONNX、UFF、TNN、ncnn、OpenVINO等模型的可视化
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 使用netron对TensorFlow.Pytorch.Keras.PaddlePaddle.MXNet.Caffe.O ...
- 手写数字集MNIST(1)下载
ML界的Hello World:手写数字集MNIST(1)下载 下载.显示MNIST数据集 import tensorflow as tf import matplotlib.pyplot as pl ...
- pytorch实现手写数字识别_Paddle和Pytorch实现MNIST手写数字集识别对比
一.简介 1. Paddle PaddlePaddle是百度自主研发的集深度学习核心框架.工具组件和服务平台为一体的技术领先.功能完备的开源深度学习平台,有全面的官方支持的工业级应用模型,涵盖自然语言 ...
- TensorRT(3)-C++ API使用:mnist手写体识别
本节将介绍如何使用tensorRT C++ API 进行网络模型创建. 1 使用C++ API 进行 tensorRT 模型创建 还是通过 tensorRT官方给的一个例程来学习. 还是mnist手写 ...
- numpy实现神经网络代码(mnist手写体识别)
实现四层神经网络,如下图: 反向传播原理: "反向传播算法"过程及公式推导(超直观好懂的Backpropagation)_aift的专栏-CSDN博客_反向传播算法 使用SGD(小 ...
- Tensorflow 改进的MNIST手写体数字识别
上篇简单的Tensorflow解决MNIST手写体数字识别可扩展性并不好.例如计算前向传播的函数需要将所有的变量都传入,当神经网络的结构变得复杂.参数更多时,程序的可读性变得非常差.而且这种方式会导致 ...
最新文章
- python闭包和函数调用区别_函数闭包与可调用类
- iview的表格自定义_Vue中使用iview-UI表格样式修改和使用自定义模板数据渲染相关...
- oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)
- ActiveMq使用笔记
- JS关键字和保留字汇总(小记)
- Keras同时用多张显卡训练网络
- 远程控制slam小车及pid调试PC与树莓派ssh链接时出现间歇性联通段开网络故障acailable I Destination Host Unreachable_然后5s后切换了一个地图
- python html解析对比_python htmlparse页面解析示例
- git clone 失败_鲜为人知的Git功能——Git Worktree工作树
- PLSQL Developer 安装使用教程详解
- ISSCC 2017论文导读 Session 14:A 288μW Programmable Deep-Learning Processor with 270KB On-Chip Weight
- 3cdaemon漏洞挖掘 Exploit
- 华为ME909s-821模块电信卡发短信问题
- 虚拟机无法连接到图形服务器,vmware vsphere client无法连接到服务器
- java微服务案例分析_《Java深入微服务原理改造房产销售平台》知识点梳理与问答总结...
- 物联网专业本科毕业论文选题
- mint-ui —— checklist的使用
- 上市公司内控信息披露指数(2000-2018年)
- 读研的那些事儿(三)
- 怎么用ip查看服务器文件共享,怎么查看已知IP下的共享文件夹!~