【数字识别】基于matlab离散Hopfield神经网络数字识别【含Matlab源码 226期】

举报
海神之光 发表于 2022/05/29 05:37:21 2022/05/29
【摘要】 一、反馈神经Hopfield数字识别简介 0 前言 数字字符识别(Numeral Recognition) 是光学字符识别(Optical Character Recognition, OCR) 技术的...

一、反馈神经Hopfield数字识别简介

0 前言
数字字符识别(Numeral Recognition) 是光学字符识别(Optical Character Recognition, OCR) 技术的一个重要分支。它在大规模数据统计、邮件分拣、汽车牌照、支票、财务、税务、金融等有关数字编号的识别方面得到广泛应用。用数字识别系统代替手工录入,可节约大量的人力和财力。因此,数字识别的研究有着重大的现实意义,多年来一直是研究的一个热点。
人工神经网络是生理学上的真实人脑神经网络的机构和功能,以及若干基本特性的某种理论抽象、简化和模拟而构成的一种信息处理系统。从系统观点看,人工神经网络是由大量神经元通过极其丰富和完善的连接而构成的自适应非线性动态系统。由于神经元之间有着不同的连接方式,所以组成不同结构形态的神经网络系统是可能的。

1离散Hopfield网络概述
Hopfield网络作为一种全连接型的神经网络, 曾经为人工神经网络的发展开辟了新的研究途径。它利用与阶层型神经网络不同的结构特征和学习方法,模拟生物神经网络的记忆机理,获得了令人满意的结果。这一网络及学习算法最初是由美国物理学家J.J Hopfield于1982年首先提出的, 故称为Hopfield神经网络。Hopfield最早提出的网络是二值神经网络, 神经元的输出只是取1和-1, 所以, 也称离散Hopfield神经网络(D HNN, Dis crete Hopfield Neural Network) 。在离散Hopfield神经网络中, 所采用的神经元是二值神经元, 因此, 所输出的离散值1和-1分别表示神经元处于激活和抑制状态。

1.1 网络结构
D HNN是一种单层, 输出为二值的反馈网络。假设有一个由三个神经元组成的离散神经网络, 其结构如图1所示。
在这里插入图片描述
图1 离散Hopfield网络结构
在图1中,第0层仅仅作为网络的输入,它不是实际神经元,所以无计算功能;第1层是神经元,故而执行对输入信息与权系数的乘积求累加和,并经非线性函数f处理后产生输出信息。f是一个简单的阈值函数,如果神经元的输出信息大于阈值,那么,神经元的输出取值为1;小于阈值e,则神经元的输出取值为-1。对于二值神经元,它的计算公式为
在这里插入图片描述
式 (2.1) 中, 为外部输入, 并且有
在这里插入图片描述
一个D HNN的网络状态是输出神经元信息的集合, 对于一个输出层是n个神经元的网络, 其t时刻的状态为一个n维向量Y(t)=T(2.3)因为y(t) (i=1, 2, 3…n) 可以取值为1或-1, 故n维向量Y(t) 有种2"状态, 即网络有2"种状态, 考虑D HNN的一般节点状态,用yj(t)表示第j个神经元,即节点j在时刻t的状态,则节点的下一个时刻(t+1)的状态可以求得
在这里插入图片描述
如果wij在i=j时等于0, 说明一个神经元的输出并不会反馈到其输入, 这时, DHNN称为无自反馈的网络。如果wij在i=j时不等于0, 说明一个神经元的输出会反馈到其输入端, 这时, DHNN称为有自反馈的网络。

2 离散Hopfield神经网络在数字识别中的应用
2.1问题描述
根据Hopfield神经网络相关知识, 设计一个具有联想记忆功能的离散型Hopfield神经网络。要求该网络可以正确地识别0~9这10个数字,当数字被一定的噪声干扰后,仍具有较好的识别效果。
2.2 模型建立
2.2.1设计思路
假设网络由0~9共10个稳态构成,每个稳态用10×10的矩阵车表示。该矩阵直观地描述模拟阿拉伯数字,即将数字划分成10×10的矩阵,有数字的部分用1表示,空白部分用-1表示。网络对这10个稳态即10个数字(点阵)具有联想记忆的功能,当有带噪声的数字点阵输入到该网络时,网络的输出便可以得到最接近的目标向量(即10个稳态),从而达到正确识别的效果。
2.2.2设计步骤
在此思路的基础上, 设计Hopfield网络需要经过以下几个步骤。
在这里插入图片描述
图2 Hopfield网络设计流程图
(1) 输入输出设计——设计数字点阵 (0~9)
在这里插入图片描述
图3 数字1、2的点阵图
如图3所示, 有数字的部分用1表示, 黑色部分用-1表示, 即可得到数字1和2的点阵
在这里插入图片描述
其他的数字点阵以此类推。
(2) 创建Hopfield网络
MATLAB神经网络工具箱为Hopfield网络提供了一些工具函数。10个数字点阵, 即Hopfield网络的目标向量确定以后, 可以借助这些函数, 方便地创建Hopfield网络。具体过程见MATLAB实现部分。
(3)产生带噪声的数字点阵
带噪声的数字点阵,即点阵的某些位置的值发生了变化。模拟产生带噪声的数字矩阵方法很多种,比如固定噪声产生法和随机噪声产生法。本论文采用随机噪声产生法。
(4)数字识别测试
带噪声的数字点阵输入到创建好的Hopfield网络, 网络的输出是与该数字点阵最为接近的目标向量, 即0~9中的某个数字,从而实现联想记忆的功能。
(5)结果分析
对测试结果进行分析、比较, 通过大量的测试来验证Hopfield网络用于数字识别的可行性与有效性。

3 MATLAB环境下实现数字识别
MATLAB神经网络工具箱中包含了许多用于Hopfield网络分析与设计的函数, 利用MATLAB神经网络工具箱提供的函数, 将设计步骤一—在MATLAB环境下实现。

3.1输入输出设计
以数字1和2为例,利用这两个数字点阵够成训练样本T
T=A may_one, a may_wo] ';
这里, array_one, array_two分别表示第三章所设计的数字1、2的点阵。

3.2 网络建立
利用new hop() 函数可以方便的创建一个离散Hopfield神经网络
net=new hop(T) ;
其中, T是具有Q个目标向量的矩阵(元素必须为-1或1) ; net为生成的神经网络, 具有在T中的向量上稳定的点。

3.3产生带噪声的数字点阵
利用随机函数产生法就是用产生随机数的方法来确定需要修改的点阵位置, 进而对数字点阵进行修改。例如产生带噪声的数字1和2的数字点阵
在这里插入图片描述
3.4 数字识别测试
利用神经网络工具箱中函数, 将带噪声的数字点阵输入已创建好的网络, 便可以对带噪声的数字点阵进行识别, 同时可以改变噪声强度系数, 观察结果的识别效果, 从而检验识别网络系统的性能。部分程序如下
在这里插入图片描述
3.5 结果分析
在这里插入图片描述
图4 随机噪声产生法数字识别效果
通过观察图4,可以分别看到,标准数字,噪声数字和识别后的数字的识别效果,结果显示识别效果较好。从而我们可知, 通过联想记忆, 对于带一定噪声的数字点阵, Hopfield网络可以正确地进行识别。图4中是噪声强度为0.1时的识别效果,从图中可以看出识别效果很好。

二、部分源代码

clc % 清屏
clear all; % 删除workplace变量
close all; % 关掉显示图形窗口
% 标准数字
% one=[-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
%      -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
%      -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
%      -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
%      -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1];
%  
% two=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
%      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
%      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
%      -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
%      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 
 three=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
   
    four=[-1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1];
  
  one=three;
  two=four;
 
% 显示标准数字图像
%数字1
 ONE=imresize(one,20);
 subplot(3,2,1)
 imshow(ONE)
 title('模板图像')
%数字2 
 TWO=imresize(two,20);
 subplot(3,2,2)
 imshow(TWO)
 title('模板图像')
 
% 创建hopfield网络
 T=[one;two]';
 net=newhop(T);
 
%  产生噪声
% 人为噪声
% no1=[-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 -1 -1 -1 -1 -1;...
%     -1 -1 1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 1 -1 -1 -1;...
%     -1 -1 -1 -1 -1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 1 -1 -1;...
%     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 1 -1 -1 1 1 -1 -1 -1 -1;...
%     -1 -1 -1 -1 -1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 1 -1];
% 
% no2=[-1 1 1 1 -1 1 1 -1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
%     -1 -1 1 -1 1 -1 -1 1 1 -1;-1 -1 -1 1 -1 1 -1 1 1 -1;...
%     -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
%     -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
%     -1 1 1 1 -1 1 1 1 1 -1;-1 1 1 -1 1 1 1 1 1 -1];

% 随机噪声
rand('state',0);
for i=1:100
    a=rand;
    if a<0.1 % 加入噪声比,一般a较大,识别效果较差
       one(i)=-one(i);
       two(i)=-two(i);
    end
end
no1=one;
no2=two;
 
%  加入噪声后的数字图像
 subplot(3,2,3)
 NO1=imresize(no1,20);
 imshow(NO1)
 title('加入噪声后模板图像')
 
 subplot(3,2,4)
 NO2=imresize(no2,20);
 imshow(NO2)
 title('加入噪声后模板图像')
 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

三、运行结果

在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/113694281

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。