更改

大数据与机器智能

删除15字节2016年10月25日 (二) 17:31
/* 手写数字识别DIG */
====手写数字识别DIG====
手写数字识别DIG这个单元由我们第三组负责。 由于技术上对Lucida API调用规则了解不深,我们组在工业云安装完成Lucida后对于这个项目并没能成功做出自己的前端,因此,我们主要是对程序代码以及tutorial里面的内容的一些分析,并查阅了相关资料。 首先,手写数字识别这一个项目,我们可以通过给定一个只包含一个手写数字的jpeg格式照片,那么这一个项目可以识别出这个数字是0到9当中的哪一个。 然后,这一个项目的代码结构主要分为以下的几个部分: 1.压缩并存储。在这一步当中,程序通过对给定jpeg文件的输入进行分析,并通过将这个文件压缩到一个固定大小然后存储起来。 2.黑白二值化。就是通过对原有图片进行一定的修改,使得数字部分和背景部分能更好的区分开来。在这一步当中,应该可以通过采取较优的黑白二值化的方法
(比如说可以与周围一定数量的像素点进行比对)从而同时消除噪点,提高识别的精度。
3.把修改后的图片作为神经网络的输入。这一步,就是把经过上两步操作后得到的像素矩阵输入到神经网络当中,然后通过调用caffe(卷积神经网络框架)返回权值从而得到与各个数字的一个相关权值; 4.根据得到的相关权值,返回结果。 以上就是该项目程序的主要部分。
我们可以注意到里面运用到了一个卷积神经网络框架模型。我们通过查阅资料得知,该模型,是通过前期的一些训练准备从而具有对相关图片的识别能力。
训练准备的步骤大概分为两步:
首先,是初始化网络及学习参数,如设置网络初始权矩阵、学习因子等。 然后,就是提供各种相关图片的监督训练模式,训练神经网络,不断修正,直到满足要求为止。 而训练神经网络这一步,分为前向传播过程和后向传播过程。 前向传播过程就是通过给定的训练模式的输入,计算网络的输出模型,并与期望模式进行比较,如果达到要求,则进行下一个训练模式;如果未达要求,则进行后向传播的过程。 (与我们的识别图像一步比较相似,只不过我们识别图像的时候是直接返回网络计算出来的输出模型) 后向传播过程则是可分为三个步骤:
1. 计算同一层单元的误差;
2. 修正权值和阈值;
3. 进行下一个训练模式。
上面的具体操作则是通过将原本的特征maps与一个可学习的卷积核进行卷积,并通过一个激活函数得到输出特征map。然后再利用计算出来的灵敏度map进行梯度下降方法对原本的特征maps进行修正。 那么,通过对足够多的训练模式去训练网络,我们就可以得到一个足够优的神经网络去解决手写数字识别问题。
在一定量的数据集训练之后,该网络就具有识别数字的能力,在应用时不必再次学习,只需要载入神经网络每个节点对应的权值即可。所以Lucida没有公开它训练的过程,而是直接提供的具有识别能力的训练好的网络的参数。
8
个编辑