基于Hopfield神经网络的数字识别

来源:互联网 发布:java awt和swing 编辑:程序博客网 时间:2024/05/29 10:13

        在日常生活中,经常遇到带噪声字符的识别问题,如交通系统中汽车牌照,由于汽车在使用过程中,要经受自然环境中的日吹风晒或者其他污染,造成字体的模糊不清,难以辨认,这是常常发生的事。如何从这些残缺不全的字符中提取完整的信息,达到正确识别,这是字符识别的关键问题。字符识别在邮政,交通及商业票据管理等方面有着极高的应用价值。

        目前有很多字符识别的方法,如人工神经网络识别,概率统计识别和模糊识别等。传统的识别方法在有干扰的情况下不能很好的对字符进行识别,而离散型的Hopfield神经网络具有联想记忆的功能,利用这一功能对字符识别可以取得令人满意的效果。

一、离散型Hopfield神经网络的原理

        Hopfield网络最初由美国物理学家J. J Hopfield于1982年首次提出来的。它作为一种全连接型的神经网络,为人工神经网络的发展进程开辟了新的研究途径。Hopf field神经网络是一种互连型神经网络,其演变过程是一个非线性动力学系统,可以用一组非线性差分方程描述(离散型)或微分方程(连续型)来描述。系统的稳定性可用所谓的“能量函数”进行分析。在满足条件的情况下,某种“能量函数”的能量在网络运行过程中不断地减少,最后趋于稳定的平衡状态。对于一个非线性动力学系统,系统的状态从某一初值出发经过演变后可能有如下几种结果:渐进稳定点、极限环、混沌、状态发散。

        因为人工神经网络的变换函数是一个有界函数,故系统的状态不会发生发散现象。目前,人工神经网络经常利用渐进稳定点来解决某些问题。如果把系统的稳定点视为一个记忆的话,那么从初态朝这个稳定点的演变过程就是一个寻找记忆的过程。如果把系统的稳定点视为一个能量函数的极小点,而把能量函数视为一个优化问题的目标函数,那么从初态朝这个稳定点的演变过程就是一个求解该优化问题的过程。因此,Hopfield神经网络的演变过程是一个计算联想记忆或求解优化问题的过程。实际上,它的解决并不需要真的去计算,而是通过构成反馈神经网络,适当地设计其连接权和输入就可以达到这个目的。

        离散型Hopfield网络是单层的、输入输出为二值的反馈网络,在离散型网络中每个神经元都有相同功能,其输出称为状态。它主要用于联想记忆,当网络的初始态确定后,网络状态按其工作规则向能量递减的方向变化,最后接近或达到平衡点。这种平衡点又称为吸引子。如果设法把网络所需记忆的模式设计成某个确定网络状态的一个平衡点,则当网络从与记忆模式较接近的某个初始状态出发后,按Hopfield运行规则进行状态更新,最后网络状态稳定在能量函数的极小点,即记忆模式所对应的状态。这样就完成了由部分信息或失真的信息到全部或完整信息的联想记忆过程。离散型Hopfield神经网络的结构如下图:




       图中第0层仅仅作为网络的输入,它不是实际神经元,所以无计算功能;第一层是神经元,故而执行对输入信息与权系数的乘积求累加和,并经非线性函数f处理后产生输出信息。f是一个简单的阈值函数,如果神经元的输出信息大于阈值0,那么,神经元的输出取值为1;小于阈值为0,则神经元的输出取值为-1。


二、Hopfield神经网络在字符识别中的应用

2.1 问题描述:

根据Hopfield神经网络的相关知识,设计一个具有联想记忆功能的离散型Hopfiled神经网络。要求该网络可以正确识别0-9这10个数字,当数字被一定的噪声干扰后,仍具有较好的识别效果。

2.2 设计思路

       假设网络由0-9共10个稳态构成,每个稳态用10*10的矩阵表示。该矩阵直观地描述模拟阿拉伯数字,即将数字划分成10*10的矩阵,有数字的部分用1表示,空白部分用-1表示。网络对这10个稳态即10个数字(点阵)具有联想记忆功能,当有带噪声的数字点阵输入到该网络时,网络的输出便可以得到最接近的目标向量(即10个稳态),从而达到正确识别的效果。

设计步骤;

在此思路的基础上,设计Hopfield网络需要经过以下几个步骤:

1、设计数字点阵

有数字部分用1表示,空白部分用-1表示,将0-9的矩阵设计好存储。

2、创建网络

        MATLAB神经网络工具箱为Hopfield网络提供了一些工具函数。如newhop()函数用于创建一个离散型Hopfiled神经网络,其调用格式为net=newhop(T),其中,T是具有Q个目标向量的R*Q的矩阵(元素必须为-1或1);net为生成的神经网络,具有在T中的向量上稳定的点。Hopfield网络仅有一层,其激活函数用satlins()函数。

3、产生带噪声的数字点阵

带噪声的数字点阵,即点阵的某些位置的值发生了变化。模拟产生带噪声的数字矩阵方法有很多种,如固定噪声产生法和随机噪声产生法。本实验采用随机噪声产生法。

4、数字识别测试

将带噪声的数字点阵输入到创建好的Hopfiled网络,网络的输出是与该数字点阵最为接近的目标向量,从而实现联想记忆功能。

5、结果分析

对测试的结果进行分析比较,通过大量的测试来验证Hopfield网络用于数字识别的可行性与有效性。

    

               a.随机噪声10%时                                  b.随机噪声15%时  


  

                 c. 随机噪声20%时                           c, 随机噪声30%时                                                                                                     


附程序:

clear

clc

%%导入数字的点阵

load data1 array_one

load data2 array_two

T=[array_one;array_two]';

%%创建网络

net=newhop(T);

%%添加随机噪声

noisy_array_one=array_one;

 noisy_array_two=array_two;

 for i=1:100

     a=rand;

     if a<0.2

        noisy_array_one(i)=-array_one(i);

        noisy_array_two(i)=-array_two(i);

     end

 end

%%开始识别

noisy_one={(noisy_array_one)'};

identify_one=sim(net,{10,10},{},noisy_one);

identify_one{10}';

noisy_two={(noisy_array_two)'};

identify_two=sim(net,{10,10},{},noisy_two);

identify_two{10}';

%% 结果显示

Array_one=imresize(array_one,20);

subplot(3,2,1)

imshow(Array_one)

title('标准(数字1)')

Array_two=imresize(array_two,20);

subplot(3,2,2)

imshow(Array_two)

title('标准(数字2)')

subplot(3,2,3)

Noisy_array_one=imresize(noisy_array_one,20);

imshow(Noisy_array_one)

title('噪声(数字1)')

subplot(3,2,4)

Noisy_array_two=imresize(noisy_array_two,20);

imshow(Noisy_array_two)

title('噪声(数字2)')

subplot(3,2,5)

imshow(imresize(identify_one{10}',20))

title('识别(数字1)')

subplot(3,2,6)

imshow(imresize(identify_two{10}',20))

title('识别(数字2)')



1 0
原创粉丝点击