离散Hopfield神经网络的联想记忆与matlab实现

1案例背景

1.1离散Hopfield神经网络概述

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

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

2.网络工作方式
        Hopfield网络按动力学方式运行,其工作过程为神经元状态的演化过程,即从初始状态按“能量”(Lyapunov函数)减小的方向进行演化,直到达到稳定状态,稳定状态即为网络的输出。
Hopfield网络的工作方式主要有两种形式:
        ①串行(异步)工作方式。在任一时刻t,只有某一神经元ü(随机的或确定的选择)依式(9-4)与式(9-5)变化,而其他神经元的状态不变。
        ②并行(同步)工作方式。在任一时刻t,部分神经元或全部神经元的状态同时改变。下面以串行(异步)工作方式为例说明Hopfield网络的运行步骤:
        步骤1:对网络进行初始化。
        步骤2:从网络中随机选取一个神经元i。步骤3:计算该神经元主的输入ui(t)。
        步骤4:计算该神经元i的输出v;(t+1),此时网络中其他神经元的输出保持不变。
        步骤5:判断网络是否达到稳定状态,若达到稳定状态或满足给定条件则结束;否则转到步骤2继续运行。
        这里网络的稳定状态定义为;若网络从某一时刻以后,状态不再发生变化,则称网络处于稳定状态。

        3.网络稳定性
        从 DHNN的结构可以看出:它是一种多输人,含有阈值的二值非线性动态系统。在动态系统中,平衡稳定状态可以理解为系统某种形式的能量函数在系统运动过程中,其能量值不断减小,最后处于最小值。
        Coben和 Grossberg在1983年给出了关于 Hopfield网络稳定的充分条件,他们指出:如果 Hopfield网络的权系数矩阵W是一个对称矩阵,并且对角线元素为0,则这个网络是稳定的。即在权系数矩阵W中,如果

        则Hopfield网络是稳定的。详细推导过程见参考文献[1]~~[3]。
        应该指出,这只是 Hopfield网络稳定的充分条件,而不是必要条件。在实际中有很多稳定的Hopfield网络,但是它们并不满足权系数矩阵W是对称矩阵这一条件。

1.2数字识别概述

        在日常生活中,经常会遇到带噪声字符的识别问题,如交通系统中汽车车号和汽车牌照,由于汽车在使用过程中,要经受自然环境的风吹日晒,造成字体模糊不清,难以辨认。如何从这些残缺不全的字符中攫取完整的信息,是字符识别的关键问题。作为字符识别的组成部分之一,数字识别在邮政、交通及商业票据管理方面有着极高的应用价值。
        目前有很多种方法用于字符识别,主要分为神经网络识别,概率统计识别和模糊识别等。传统的数字识别方法在有干扰的情况下不能很好地对数字进行识别,而离散型Hopfield神经网络具有联想记忆的功能,利用这一功能对数字进行识别可以取得令人满意的效果,并且计算的收敛速度很快。

1.3 问题描述

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

2模型建立

2.1设计思路

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

 

2.2 设计步骤

        在此思路的基础上,设计Hopfield网络需要经过以下几个步骤,如图9-3所示。

        1、输入输出设计——设计数字点阵(0~9)
        如图9-2所示,有数字的部分用1表示,空白部分用-1表示,即可得到数字1和数字2的点阵:

array_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];
array_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];

        其他的数字点阵以此类推。

        2.创建 Hopfield网络
        MATLAB神经网络工具箱为Hopfield网络提供了一些工具函数。10个数字点阵,即Hopfield网络的目标向量确定以后,可以借助这些函数,方便地创建Hopfield网络。具体过程见9.4节。
        3.产生带噪声的数字点阵
        带噪声的数字点阵,即点阵的某些位置的值发生了变化。模拟产生带噪声的数字矩阵方法有很多种,由于篇幅所限,本书仅列举两种比较常见的方法:固定噪声产生法和随机噪声产生法。
        4.数字识别测试
        将带噪声的数字点阵输入到创建好的Hopfield网络,网络的输出是与该数字点阵最为接近的目标向量,即0~9中的某个数字,从而实现联想记忆的功能。
        5.结果分析
        对测试的结果进行分析、比较,通过大量的测试来验证Hopfield 网络用于数字识别的可行性与有效性。

3 Hopfield网络的神经网络工具箱函数

        MATLAB神经网络工具箱中包含了许多用于Hopfield网络分析与设计的函数,本节将详细说明常用的两个函数的功能、调用格式以及参数意义等。

3.1 Hopfield网络创建函数

        newhop()函数用于创建一个离散型 Hopfield神经网络,其调用格式为:

net = newhop(T);

其中,T是具有Q个目标向量的RXQ矩阵(元素必须为-1或1);net为生成的神经网络,具有在T中的向量上稳定的点。
        Hopfield神经网络仅有一层,其激活函数用satlins()函数。9.3.2 Hopfield网络仿真函数
sim()函数用于对神经网络进行仿真,其调用格式为:

[Y,Af,E, perf] = sim(net,P.Ai,T)
[Y,Af,E,perf] =sim(net,{Q TS} ,Ai,T)

        其中,P,Q为测试向量的个数;Ai表示初始的层延时,默认为0;T表示测试向量(矩阵或元胞数组形式);TS为测试的步数;Y为网络的输出矢量;Af为训练终止时的层延迟状态;E为误差矢量; perf为网络的性能。

        函数中用到的参数采取了两种不同的形式进行表示:矩阵和元胞数组。矩阵的形式只用于仿真的时间步长TS=1的场合,元胞数组形式常用于一些没有输入信号的神经网络。

4 MATLAB 实现

        利用MATLAB神经网络工具箱提供的函数,将设计步骤一一在MATLAB环境下实现,matlab代码如下:

%% Hopfield神经网络的联想记忆——数字识别

%% 清空环境变量
clear all
clc

%% 数据导入
load data1 array_one
load data2 array_two

%% 训练样本(目标向量)
 T = [array_one;array_two]';
 
%% 创建网络
 net = newhop(T);
 
%% 数字1和2的带噪声数字点阵(固定法)
load data1_noisy noisy_array_one
load data2_noisy noisy_array_two

%% 数字1和2的带噪声数字点阵(随机法)

% noisy_array_one=array_one;
% noisy_array_two=array_two;
% for i = 1:100
%     a = rand;
%     if a < 0.3
%        noisy_array_one(i) = -array_one(i);
%        noisy_array_two(i) = -array_two(i);
%     end
% end

%% 数字识别

% 单步仿真——TS = 1(矩阵形式)
% identify_one = sim(net,10,[],noisy_array_one');  
% 多步仿真——元胞数组形式
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)')

 

5案例扩展

5.1识别效果讨论

        图9-5所示是噪声强度为0.1(即10%的数字点阵位置值发生了改变)时的识别效果,从图中可以看出识别效果很好。进一步的研究发现,随着噪声强度的增加,识别效果逐渐下降。噪声强度为0.2和0.3时的识别结果分别如图9-6和图9-7所示,从图中不难看出,当噪声强度为0.3时,Hopfield已经很难对数字进行识别。

 

5.2应用扩展

        离散型 Hopfield神经网络具有联想记忆的功能。近年来,越来越多的研究人员尝试着将Hopfield神经网络应用到各个领域,因此解决了很多传统方法难以解决的问题,如水质评价、发电机故障诊断、项目风险分析等。
        将一些优化算法与离散Hopfield神经网络相结合,可以使其联想记忆能力更强,应用效果更为突出。例如,由于一般离散Hopfield神经网络存在很多伪稳定点,网络很难达到真正的稳态。将遗传算法应用到离散Hopfield神经网络中,利用遗传算法的全局搜索能力,对Hopfield联想记忆稳态进行优化,使待联想的模式跳出伪稳定点,从而使Hopfield网络在较高噪信比的情况下保持较高的联想成功率。

完整数据文件和代码可以戳这个链接下载:

https://download.csdn.net/download/weixin_44209907/88152893

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/58425.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RPC框架引入zookeeper服务注册与服务发现

Zookeeper概念及其作用 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是大数据生态中的重要组件。它是集群的管理者&#xff0c;监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理…

(自控原理)线性系统的时域分析法

目录 一、系统时间响应的性能指标 1、典型输入信号 2、动态性能与稳态性能 二、一阶系统的时域分析 1、一阶系统的数学模型 2、一阶系统的单位阶跃响应 三、二阶系统的时域分析 1、二阶系统的数学模型 2、二阶系统的单位阶跃响应 3、欠阻尼二阶系统的动态过程分析 4…

ORB-SLAM2学习笔记6之D435i双目IR相机运行ROS版ORB-SLAM2并发布位姿pose的rostopic

文章目录 0 引言1 D435i相机配置2 新增发布双目位姿功能2.1 新增d435i_stereo.cc代码2.2 修改CMakeLists.txt2.3 新增配置文件D435i.yaml 3 编译运行和结果3.1 编译运行3.2 结果3.3 可能出现的问题 0 引言 ORB-SLAM2学习笔记1已成功编译安装ROS版本ORB-SLAM2到本地&#xff0c…

Redis面试题2

Redis面试题-2 10、统计高并发网站每个网页每天的 UV 数据&#xff0c;结合Redis你会如何实现&#xff1f; 选用方案&#xff1a;HyperLogLog 如果统计 PV 那非常好办&#xff0c;给每个网页一个独立的 Redis 计数器就可以了&#xff0c;这个计数器的 key 后缀加上当天的日期…

【eNSP】静态路由

【eNSP】静态路由 原理网关路由表 实验根据图片连接模块配置路由器设备R1R2R3R4 配置PC的IP地址、掩码、网关PC1PC2PC3 配置静态路由查看路由表R1R2R3R4测试能否通信 原理 网关 网关与路由器地址相同&#xff0c;一般路由地址为.1或.254。 网关是当电脑发送的数据的目标IP不在…

芯片制造详解.光刻技术与基本流程.学习笔记(四)

本篇文章是看了以下视频后的笔记提炼&#xff0c;欢迎各位观看原视频&#xff0c;这里附上地址 芯片制造详解04&#xff1a;光刻技术与基本流程&#xff5c;国产之路不容易 芯片制造详解.光刻技术与基本流程.学习笔记 四 一、引子二、光刻(1).光掩膜(2).光刻机(3).光刻胶(4).挖…

【深度学习】High-Resolution Image Synthesis with Latent Diffusion Models,论文

13 Apr 2022 论文&#xff1a;https://arxiv.org/abs/2112.10752 代码&#xff1a;https://github.com/CompVis/latent-diffusion 文章目录 PS基本概念运作原理 AbstractIntroductionRelated WorkMethodPerceptual Image CompressionLatent Diffusion Models Conditioning Mec…

什么是线程?为什么需要线程?和进程的区别?

目录 前言 一.线程是什么&#xff1f; 1.1.为什么需要线程 1.2线程的概念 1.3线程和进程的区别 二.线程的生命周期 三.认识多线程 总结 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 &#x1f3a5; 本文由 tq02 原创&#xf…

深入探索Vue.js核心技术与跨平台开发uni-app实战

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 前言 在当今Web应用不断…

UGUI图文混排超链接

目录 一、LinkSpriteText二、EmojiText1、EmojiText2、支持超链接的EmojiText出现的问题 三、通用版EmojiText1、使用方法 之前做web项目有个需求需要通过某种方式打开试题中所提到的关键字介绍,当时是在试题旁边放个小按钮点击打开,后来要求把图标放在题干中,或者直接点击关键…

【C++奇遇记】函数探幽(上)

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…

誉天程序员-瀑布模型-敏捷开发模型-DevOps模型比较

文章目录 2. 项目开发-开发方式2.1. 瀑布开发模型2.2. 敏捷开发模型2.3. DevOps开发模型2.4. 区别 自增主键策略1、数据库支持主键自增自增和uuid方案优缺点 2. 项目开发-开发方式 由传统的瀑布开发模型、敏捷开发模型&#xff0c;一跃升级到DevOps开发运维一体化开发模型。 …

swagger相关问题

swagger相关问题 swagger版本为&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version> </dependency> <dependency><groupId&…

Grafana集成prometheus(4.Grafana添加预警)

上文已经完成了grafana对prometheus的集成及数据导入&#xff0c;本文主要记录grafana的预警功能&#xff08;以内存为例&#xff09; 添加预警 添加入口&#xff08;2个&#xff09; databorard面板点击edit&#xff0c;下方有个Alert的tab&#xff0c;创建Alert rules依赖…

IDEA偶尔编译的时候不识别lombok

偶尔IDEA启动项目的时候会识别不到lombok,识别不到get()跟set()方法 方案 在settings添加下面代码 -Djps.track.ap.dependenciesfalse

自然语言处理学习笔记(二)————语料库与开源工具

目录 1.语料库 2.语料库建设 &#xff08;1&#xff09;规范制定 &#xff08;2&#xff09;人员培训 &#xff08;3&#xff09;人工标注 3.中文处理中的常见语料库 &#xff08;1&#xff09;中文分词语料库 &#xff08;2&#xff09;词性标注语料库 &#xff08;3…

我理解的音响设备音频放大器地线环路共地回路造成交流声干扰哼声的分析,信号接地,工业仪表接地的问题

我理解的音响设备音频放大器地线环路共地回路造成交流声干扰哼声的分析&#xff0c;信号接地&#xff0c;工业仪表接地的问题 wxleasyland 2023.8 一、地线环路造成交流声哼声 家里插座中有一个的PE地线&#xff0c;相当于大地。 设备1的“信号地”接到家里三脚插座的PE地线…

【雕爷学编程】MicroPython动手做(39)——机器视觉之图像基础2

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…

unity TextMeshPro 富文本

<b>粗体标签</b> <i>斜体标签</i> <u>下划线标签</u> <s>删除线标签</s> <sup>上标标签</sup>前面后边上标签 5<sup>。</sup>C <sub>下标标签&#xff0c;如&#xff1a;</sub>H<sub&…