学习caffe深度学习框架时,最基本的一个应用实例是手写字体识别例程,这是caffe自带的例程,通过这个例程可以了解caffe框架使用的一个基本流程。在这个例程中,知识点比较多,在这篇文章中,我们只关系操作相关的内容,不进行代码和理论分析,让大家先把例程跑通,然后再分成几篇文章对这个例程的知识点进行介绍。这个例程的样板是MNIST数据集,它是一个大型手写体数字的数据库,包含了60000个训练集和10000个测试集,每张图都已经进行了尺寸归一化,数字居中处理,固定尺寸为28像素X28像素。数据集的样本如下图所示。这个例程我们使用这个数据库对caffe网络进行训练,并用训练的网络进行预测。

1、下载MNIST数据集

这个例程,我们在caffe的安装目录下进行,首先我们在终端中进入到caffe安装目录,然后执行下面的命令

cd data/mnist
./get_mnist.sh

这两个命令的作用是进入到mnist文件夹,并且采用get_mnist.sh脚本文件来下载MNIST数据集。成功执行命令之后,在文件夹下下载下来4个文件,分别为:t10k-images-idx3-ubyte、t10k-labels-idx1-ubyte、 train-images-idx3-ubyte、train-labels-idx1-ubyte。它们分别是测试集图片文件、测试集标签文件、训练集图片文件、训练集标签文件。
        关于这些文件的详解,会在后面的文章中进行。这里可以先不管这几个文件。

2、数据集格式转换

上一步我们下载到的数据集为二进制文件,无法直接用于caffe网络的训练,我们需要把它准话为LMDB格式的文件。
在caffe的根目录下,执行下面的命令

./examples/mnist/create_mnist.sh

执行完之后,在example/mnist/目录下,生成了两个文件夹mnist_train_lmdb和mnist_test_lmdb,在这两个文件夹下每个文件夹下包含两个文件data.mdb和lock.mdb。这4个文件就是转换完成的LMDB格式的训练集和测试集文件。

3、训练模型

在这个实例中,我们使用的深度学习网络为LeNet-5网络模型,它的描述文件为examples/mnist/lenet_train_test.prototxt,训练和测试的求解器的描述文件为examples/mnist/lenet_solver.prototxt。

这一步我们对模型参数进行训练,在训练之前首先打开lenet_solver.prototxt文件。文件的最后一行修改为

solver_mode: CPU

即采用CPU模式。
        在caffe根目录下采用下面的命令对模型进行训练

./examples/mnist/train_lenet.sh

模型开始训练,在终端上会打印出训练日志,训练日志内容比较多,经过我们以后的讲解后我们会明白训练日志的每一条的作用,这里我们先不用深究日志的内容。训练日志的最后,如下所示。

I0207 15:20:14.125481  7502 solver.cpp:414]     Test net output #0: accuracy = 0.9913
I0207 15:20:14.125722  7502 solver.cpp:414]     Test net output #1: loss = 0.0262061 (* 1 = 0.0262061 loss)
I0207 15:20:14.125864  7502 solver.cpp:332] Optimization Done.
I0207 15:20:14.125982  7502 caffe.cpp:250] Optimization Done.

打印出了测试的识别精度和损失。

训练之后,在/examples/mnist/目录下生成了四个新的文件:lenet_iter_5000.caffemodel、lenet_iter_5000.solverstate、lenet_iter_10000.caffemodel、lenet_iter_10000.solverstate,它们分别为进行了5000次和10000次迭代式生成的快照,快照包含权值文件.caffemodel和求解器状态文件.solverstate。

4、数据预测

在上一步中,我们完成了模型的训练,这一步,我们用训练好的模型参数进行预测,在caffe根目录下执行下面的命令

./build/tools/caffe.bin test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -iterations 100

这个命令是调用caffe.bin对模型的识别效果进行预测,test表示处于测试状态,-model examples/mnist/lenet_train_test.prototxt指定了预测使用的模型,与我们训练时使用的模型一样,-weights examples/mnist/lenet_iter_10000.caffemodel指定预测使用的权值文件为我们上一步训练得到的权值文件,-iterations 100表示迭代次数为100次。

执行之后,在终端中打印的日志的最后两行为

I0217 13:54:22.387477 28867 caffe.cpp:321] accuracy = 0.9913
I0217 13:54:22.387509 28867 caffe.cpp:321] loss = 0.0262061 (* 1 = 0.0262061 loss)

给出了识别精度和损失。至此我们完成了手写字体识别的例程测试。

深度学习caffe--手写字体识别例程(一)——运行手写字体识别例程相关推荐

  1. TF2.0深度学习实战(一):分类问题之手写数字识别

    前言: 本专栏将分享从零开始搭建神经网络的学习过程,力争打造最易上手的小白教程.在这过程中,我将使用谷歌TensorFlow2 框架逐一复现经典的卷积神经网络:LeNet-5.AlexNet.VGG系 ...

  2. 深度学习caffe(4)——caffe配置(GPU)

    电脑:win7  64位,NVIDIA GeForce GTX1080 Ti,visual studio 2013. 深度学习caffe(1)--windows配置caffe(vs2013+pytho ...

  3. CV:基于深度学习实现目标检测之GUI界面产品设计并实现图片识别、视频识别、摄像头识别(准确度非常高)

    CV:基于深度学习实现目标检测之GUI界面产品设计并实现图片识别.视频识别.摄像头识别(准确度非常高) 目录 GUI编程设计界面 产品演示 GUI编程设计界面 产品演示 视频演示:https://bl ...

  4. Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)

    Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...

  5. caffe模型文件解析_深度学习 Caffe 初始化流程理解(数据流建立)

    深度学习 Caffe 初始化流程理解(数据流建立) 之前在简书的文章,搬迁过来 ^-^ 本文是作者原创,如有理解错误,恳请大家指出,如需引用,请注明出处. #Caffe FeatureMap数据流的建 ...

  6. 深度学习caffe实战(一)验证码识别

    狭义上讲验证码识别是将验证码图像转化成字符串值,传统方法常常先对验证码图像进行字符分割,再对验证码进行识别,劣势在于字符分割方法往往针对不同风格的验证码需要做修改,某些验证码加入噪声或线条,字符位置不 ...

  7. 深度学习3—用三层全连接神经网络训练MNIST手写数字字符集

    上一篇文章:深度学习2-任意结点数的三层全连接神经网络 距离上篇文章过去了快四个月了,真是时光飞逝,之前因为要考博所以耽误了更新,谁知道考完博后之前落下的接近半个学期的工作是如此之多,以至于弄到现在才 ...

  8. 深度学习入门-误差反向传播法(人工神经网络实现mnist数据集识别)

    文章目录 误差反向传播法 5.1 链式法则与计算图 5.2 计算图代码实践 5.3激活函数层的实现 5.4 简单矩阵求导 5.5 Affine 层的实现 5.6 softmax-with-loss层计 ...

  9. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构

    在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要的是,它将深度学习的每一个细节都原原本本地展现出来,大大 ...

  10. 【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练

    背景 我们在之前的文章中介绍过如何通过PAI内置的TensorFlow框架实验基于Cifar10的图像分类,文章链接:https://yq.aliyun.com/articles/72841.使用Te ...

最新文章

  1. 科大讯飞刘庆峰发表对未来10年AI三大判断
  2. 说说如何基于 Vue.js 实现表格组件
  3. iOS UI基础-11.0 UINavigationController
  4. Django 的简单ajax
  5. android1.6,令人遗憾的Android 1.6系统_戴尔 Mini5(Streak)_手机其它OS-中关村在线
  6. linux下ceontab不起作用,linux下crontab 不能执行的原因
  7. ARM(AM5728)板移植VSFTPD
  8. Python中的类属性和实例属性以及静态方法和类方法
  9. 2021-2025年中国催产药行业市场供需与战略研究报告
  10. plsql导出表结构语句
  11. Java白盒测试工具
  12. zedBoard USB转串口驱动下载问题
  13. 非齐次线性方程组解的结构暂记
  14. MC34063降压电路
  15. 网易2018校园招聘:重排数列 [python]
  16. 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMI
  17. makefile和make
  18. windows下Appium测试环境搭建, 并配合python操作模拟器
  19. Linux动态监控进程
  20. Wireshark 201: Intermediate Customization

热门文章

  1. 微信小程序的微信开发者工具的快捷键查找和设置
  2. 16.第二十二章.信息安全管理
  3. java聊天软件_java实现简单聊天软件
  4. 史上最全App瘦身实践
  5. SPSS学习(二)作图
  6. Windows10查看便签
  7. python机械臂写字_SCARA机器人 机械手臂 写字机 DIY 视觉识别
  8. 百兆5口工业级以太网交换机HY5700-4505F
  9. call、aplay 和 bind 三者之间的区别?
  10. Ubuntu 修改IP地址