深度学习案例:Caffe手写体数字识别

一. Caffe简介

  • Caffe是一个清晰、 高效的深度学习框架,Cafe 安装包中自带了MNIST (手写体数字)的例子。本节将通过利用MNIST具体实例,了解深度学习应用的整个流程。

二. 数据准备

  • 首先准备批图像数据。将图像数据集分为测试集和训练集两个部分, 并生成标签文件train.txt 和val.txt。 训练集用来建立模型,测试集用来评估模型的预测能力,标签文件用来标明数据分类。

  • 我们使用的MNIST数据集是一个手写体数字数据集,包含60000个训练样本和10000个测试样本,图像大小为2x2像素。Caffe中自带了MNIST的例子,可以在Caffe根目录下执行

./data/mnist/get_mnist.sh
  • 直接下载MNIST数据包。

  • MNIST手写体数字图片如下图所示:
    在这里插入图片描述

  • 由于数据的类型多种多样,不能用一套代码实现所有数据类型的输入,所以Caffe 规定了可用输入数据的类型。得到MNIST数据集后,运行脚本

./examples/mnist/create_mnist.sh
  • 可将MNIST数据集转化成Caffe可用的LMDB格式文件。

三. 模型设计

  • 准备好数据集之后,接着编写脚本定义训练的网络结构,保存为.prototxt格式文件。MNIST使用的是LeNet网络结构,在Caffe 中有现成的网络定义文件lenet_train_test.prototxt,可以直接使用。

  • LeNet模型是一个经典的卷积神经网络模型,在手写字体识别方面有出色的应用。

  • 首先网络定义了两个数据层,输入LMDB格式的数据集,分别用于训练和测试阶段。

  • 其次定义了卷积层conv1、 池化层pool1、 卷积层conv2、池化层pool2, 用于逐层提取局部特征。

  • 其次定义了全连接层ip1, 非线性层relu1, 全连接层ip2, 实现了卷积神经网络的高层表示,用于完成最后的分类。

  • 最后定义了分类准确率层accuracy,损失层loss 用于计算分类的准确率accuracy和损失值loss。

  • 对于卷积和池化,此处简述一下 。

  • 卷积,就是根据卷积窗口,进行数据的加权求和。过程可以理解为,使用一个过滤器(卷积核),过滤图像的每个小区域,得到每个小区域的特征值。

  • 通过卷积获取特征后,下一步我们希望可以利用这些特征去做分类。可事实是,一个样例图像在卷积之后,会获得一个维度很大的卷积特征向量(百万级别)。利用这样一个特征向量做分类不仅十分不便,而且容易出现过拟合。为了解决这个问题,自然需要有一个办法,既能降低特征的维度,又能避免出现过拟合现象。

  • 池化,即基于局部相关性原理对图片进行非线性降采样。在减少数据量的同时,又保留了图像的有效信息,提取了图像更加抽象的数据特征。池化的方法有很多种,如Max pooling(最大值采样)、Mean pooling(均值采样)等。LeNeT 中采用的是最经典的Maxpooling。

四. 模型训练

  • 编写模型训练脚本,包括定义网络结构的文件路径、测试的迭代次数、训练的迭代次数、网络参数(学习率、动量、权重的衰减)、学习策略、最大迭代次数等。

  • Caffe中MNIST现有的脚本文件为train_lenet.sh,其中网络结构实际定义在lenet_solver.prototxt文件中。运行脚本,开始训练模型。训练结束后,指定路径下存储了最终的相关模型文件。模型权值保存在.caffemodel文件中,训练状态保存在.solverstate中。

五. 模型测试

  • 利用最终训练好的模型权值文件,可以对测试数据集进行预测。命令如下:
./build/tools/caffe.bin test \

-model examples/mnist/lenet_train_test.prototxt \

-weights examples/mnist/lenet iter_ 10000.caffemodel \

-iterations 100
  • 命令指定了只进行模型预测,不进行参数更新,即只前向传播计算,不后向传播计算。指定了模型描述文本文件路径,模型训练好的权值文件以及测试的迭代次数。

  • 若用Caffe提供的MNIST数据集,测试训练出来的LeNet 网络,测试数据中accruacy的平均成功率达到98%。

  • 当然,我们也可以用自己的数据测试网络模型。测试数字图像需满足以下条件:一是图像需是二值化图像,且为256位黑白色,像素大小为28x28。二是,数字位于图像中间,四周无过多空白。

  • 编写手写数字识别脚本,设置环境变量、图片路径、模型路径等参数后,即可载入模型,对自己的图片进行测试。

  • 其他深度学习应用还有:语音识别、图像分析、自然语言处理等。

猜你喜欢

转载自blog.csdn.net/qq_38132105/article/details/107108426