武汉科技大学本科毕业设计(论文)
收敛、训练效果好,缺点是适应性不强。但可以通过加大训练样本数目的方法来增强其适应性。
2.BP神经网络
经图像预处理过程和特征提取之后,可以将最终得到的字符特征送入BP网络中进行训练及识别了。这里,假设设定的字符标准归一化的宽度为8,高度为16,那么对于每个字符就有128维的特征。设计BP网络的关键之处在于高效的特征提取方法、大量有代表性的训练样本、高效稳定速收敛学习算法。
(1).BP学习算法可以归纳如下:
第1步,设置变量和参数,其中包括训练样本、权值矩阵、学习速率。 第2步,初始化,给各个权值矩阵一个较小的随机非零向量。 第3步,输入随机样本。
第4步,对输入样本,前向计算BP网络每层神经元的输入信号和输出信号。 第5步,由实际输出和期望输出求得误差。判断是否满足要求,若满足要求转第8步;不满足要求转第6步。
第6步,判断是否已经到了最大迭代次数。若到,转第8步,否则反向计算每层神经元的局部梯度。
第7步,根据局部梯度修正各个矩阵的权值。
第8步,判断是否学习完所有的样本,“是”则结束,否则转第3步。 (2).BP学习中需要注意的几点:
①权值的初始化。权值的初始值应该选择均匀分布的小数经验值。初始值过大或者过小都会影响学习速度。为了避免权值的调整是同向的,应该将初始值设为随机数。
②初始权值不要太大。否则可能会处于误差平面较平坦的区域,从而导致算法无法收敛,训练失败。
③神经元的激励函数是S型函数。所以如果函数的渐进值是0,1的话,期望输出只能是小于1大于0的数,而不能是1或者0。否则可能会导致算法无法收敛。在程序中建议读者用0.1来代表0,0.9来代表1。
(3).BP网络应用过程 如图3.2所示。
第32页
武汉科技大学本科毕业设计(论文)
训练样本图片 特征提取 BP网络 图像预处理 识别 识别结果:鄂A1314
待识别数据 图3.2 BP网络应用流程 (4). BP网络3个层的神经元数目的确定
BP网络应用的第一步就是要用已知训练样本来训练BP网络。这里,BP网络的输入层的结点个数,为图像预处理后所输出的特征的维数。例如,采用了8×16归一化,特征提取采用的是逐像素特征提取法,也即直接利用每个点的像素值来作为特征,这样,对于每一个输入样本,就有8×16=128个特征。所以就可以确定,输入层的结点数为128。
对于隐层的结点数,没有什么硬性规定,一般来说,隐层神经元的数目越多,那么BP网络也就越精确,训练时间也越长。但要注意,隐层神经元不易选取太多,否则会造成识别率的急剧下降,也会降低网络的抗噪声能力。在本程序中,笔者推荐使用10个隐层神经元。读者可以自行测试一下;当将隐层神经元个数改为30个时,训练时间和识别率的变化。
对于输入层的结点数的确定,这决定于我们如何设定标准输出。也就是说如何对目标期望输出进行编码。在本程序中,笔者采用了8421码来对 0、l、2、3、4、5、6、7、8、9来进行编码。对于输出“0”,采用(0,0,0,0,0,0)这样的目标输出向量来表示,对于输出“l”,采用(0,0,0,0,0,I)这样的输出向量来表示,同理,对于输出“9”,采用(0,0,1,0,0,l)这样的输出向量来表示,对于输出“Z”,采用(1,0,0,1,1,0)这样的输出向量来表示。对于“京津沪冀鲁豫鄂苏皖晋湘桂闽川浙甘宁陕吉辽台”输出是“台”,则采用(1,1,1,0,0,l)这样的输出向量来表示。这样一来,就可以确定输出层的神经元数目为6,也即为输出向量的维数。
其实通过后续编程实践可以发现,当采用(0,0,0,0,0,0)这样的目标输出向量的时候,BP网络无法收敛。那是因为采用的激活函数(传输函数)的输出永远不可能达到0或1,而只能是接近。所以,在这里要纠正一下目标输出
第33页
武汉科技大学本科毕业设计(论文)
向量。对其重新编码后,最终确定编码方案如下:
0的编码:0.1,0.1,0.1,0.1,0.1,0.1 1的编码:0.1,0.1,0.1,0.1,0.1,0.9 2的编码:0.1,0.1,0.1,0.1,0.9,0.1 3的编码:0.1,0.1,0.1,0.1,0.9,0.9 4的编码:0.1,0.1,0.1,0.9,0.1,0.1 ?????????
9的编码:0.1,0.1,0.9,0.1,0.1,0.9 A的编码:0.1,0.1,0.9,0.1,0.9,0.1 ?????????
Z的编码:0.9,0.1,0.1,0.9,0.9,0.1 “京”的编码:0.9,0.1,0.1,0.9,0.9,0.9 ?????????
“台”的编码:0.9,0.9,0.9,0.1,0.1,0.9
double out[][6]={
0.1,0.1,0.1,0.1,0.1,0.1, ???????????????//0
0.1,0.1,0.1,0.1,0.1,0.9, ???????????????//1 0.1,0.1,0.1,0.1,0.9,0.1, ???????????????//2 0.1,0.1,0.1,0.1,0.9,0.9, ???????????????//3 0.1,0.1,0.1,0.9,0.1,0.1, ???????????????//4 0.1,0.1,0.1,0.9,0.1,0.9, ???????????????//5 0.1,0.1,0.1,0.9,0.9,0.1, ???????????????//6 0.1,0.1,0.1,0.9,0.9,0.9, ???????????????//7 0.1,0.1,0.9,0.1,0.1,0.1, ???????????????//8 0.1,0.1,0.9,0.1,0.1,0.9, ???????????????//9 0.1,0.1,0.9,0.1,0.9,0.1, ???????????????//A 0.1,0.1,0.9,0.1,0.9,0.9, ???????????????//B 0.1,0.1,0.9,0.9,0.1,0.1, ???????????????//C 0.1,0.1,0.9,0.9,0.1,0.9, ???????????????//D 0.1,0.1,0.9,0.9,0.9,0.1, ???????????????//E 0.1,0.1,0.9,0.9,0.9,0.9, ???????????????//F 0.1,0.9,0.1,0.1,0.1,0.1, ???????????????//G 0.1,0.9,0.1,0.1,0.1,0.9, ???????????????// H 0.1,0.9,0.1,0.1,0.9,0.1, ???????????????//I 0.1,0.9,0.1,0.1,0.9,0.9, ???????????????//J 0.1,0.9,0.1,0.9,0.1,0.1, ???????????????//K 0.1,0.9,0.1,0.9,0.1,0.9, ???????????????//L
第34页
武汉科技大学本科毕业设计(论文)
0.1,0.9,0.1,0.9,0.9,0.1, ???????????????//M 0.1,0.9,0.1,0.9,0.9,0.9, ???????????????//N 0.1,0.9,0.9,0.1,0.1,0.1, ???????????????//O 0.1,0.9,0.9,0.1,0.1,0.9, ???????????????//P 0.1,0.9,0.9,0.1,0.9,0.1, ???????????????//Q 0.1,0.9,0.9,0.1,0.9,0.9, ???????????????//R 0.1,0.9,0.9,0.9,0.1,0.1, ???????????????//S 0.1,0.9,0.9,0.9,0.1,0.9, ???????????????//T 0.1,0.9,0.9,0.9,0.9,0.1, ???????????????//U 0.1,0.9,0.9,0.9,0.9,0.9, ???????????????//V 0.9,0.1,0.1,0.1,0.1,0.1, ???????????????//W 0.9,0.1,0.1,0.1,0.1,0.9, ???????????????//X 0.9,0.1,0.1,0.1,0.9,0.1, ???????????????//Y 0.9,0.1,0.1,0.1,0.9,0.9, ???????????????//Z 0.9,0.1,0.1,0.9,0.1,0.1, ???????????????//京 0.9,0.1,0.1,0.9,0.1,0.9, ???????????????//津 0.9,0.1,0.1,0.9,0.9,0.1, ???????????????//沪 0.9,0.1,0.1,0.9,0.9,0.9, ???????????????//冀 0.9,0.1,0.9,0.1,0.1,0.1, ???????????????//鲁 0.9,0.1,0.9,0.1,0.1,0.9, ???????????????//豫 0.9,0.1,0.9,0.1,0.9,0.1, ???????????????//鄂 0.9,0.1,0.9,0.1,0.9,0.9, ???????????????//苏 0.9,0.1,0.9,0.9,0.1,0.1, ???????????????//皖 0.9,0.1,0.9,0.9,0.1,0.9, ???????????????//晋 0.9,0.1,0.9,0.9,0.9,0.1, ???????????????//湘 0.9,0.1,0.9,0.9,0.9,0.9, ???????????????//桂 0.9,0.9,0.1,0.1,0.1,0.1, ???????????????//闽 0.9,0.9,0.1,0.1,0.1,0.9, ???????????????//川 0.9,0.9,0.1,0.1,0.9,0.1, ???????????????//浙 0.9,0.9,0.1,0.1,0.9,0.9, ???????????????//甘 0.9,0.9,0.1,0.9,0.1,0.1, ???????????????//宁 0.9,0.9,0.1,0.9,0.1,0.9, ???????????????//陕 0.9,0.9,0.1,0.9,0.9,0.1, ???????????????//吉 0.9,0.9,0.1,0.9,0.9,0.9, ???????????????//辽 0.9,0.9,0.9,0.1,0.1,0.1, ???????????????//台
};
此数组即为目标输出向量。
(5).使用BP网络来进行字符识别的流程
首先,利用大量的训练样本来训练网络,以得到文件形式保存的权值。训练样本为精心选择的可以很好的反应样本可分性的已知数据。在程序中采用训练样本图片的格式。将训练样本图片进行特征提取后,就可以送入BP网络进行训练。
其次,训练完BP网络后,就可以用它对待识别数据进行识别了。识别有先
第35页
武汉科技大学本科毕业设计(论文)
要经过图像预处理、特征提取,最后送入BP网络识别,直接得到结果。在训练之前,程序要求输入训练参数,如训练误差、步长等。
3.3 程序的总体框架
现在,来贯穿一便程序完整的流程,以给读者一个完整清晰的认识,假设训练样本图片为pcture1,待识别的图片为pcture2。
1.样本训练
(1).对图片pcture1进行特征提取,得特征向量data_in[][]。 (2).把特征向量data_in[][]送入BP网络进行训练,保存输入层与隐层之间的权值到win.dat中,保存隐层与输出层之间的权值到whi.dat中。
(3).显示训练结果,如训练成功转字符识别,不成功则继续训练。
注释: (1)由code()函数实现,(2)、(3)由BpTrain()函数实现。
2.字符识别
(1) 对图片pcture2进行特征提取,得特征向量data_in[][]。
(2) 读取win.dat和whi.dat中的信息分别到*input_weights和hidden_weights之中。
(3)将data_in[][]送入BP网络的输入层*input_unites。
(4) 将*input_unites和*input_weights送入BP网络中进行前向输入激活, 得到*hidden_unites,再将*hidden_unites和*hidden_weights送入BP网络中进行前向输入激活得*output_unites。其实*output_unites存放的是out[][6]相关内容,即待识别样本的输出结果。
(5) 对*output_unites进行识别,如果output_unites[i]大于0.5,则判断其值为1;如果output_unites[i]小于0.5,则判断其值为0;再对其求加权值。如output_unites[]={0.1,0.1,0.9,0.1,0.1,0.9},则待识别字符为“9”。即25×0+24×0+23×1+22×0+21×0+20×1=9。
注释: (1) 由code()函数实现,(2)~(5)由CodeRecognize()函数实现 。
第36页