28离散Hopfield神经网络的联想记忆数字识别(附matlab)

news2024/9/20 14:42:47

1.简述

       学习目标:利用离散Hopfield神经网络进行联想记忆数字识别

 

1982年,美国加州理工学院的J.Hopfield教授提出了一种单层反馈神经网络,称为Hopfield网络[1]。Hopfield网络是一种循环的神经网络,从输出到输入有反馈连接。Hopfield网络可以作为联想存储器,有称为联想记忆网络。

Hopfield网络分为离散型(DHNN, discrete Hopfield Neural Network)连续型(CHNN, Continues Hopfield Neural Network)两种网络模型。

1、离散Hopfield神经网络

1.1、Hopfield网络的结构

最初提出的Hopfield网络是离散网络,输出值只能取0或者1,风别表示神经元的抑制和兴奋状态。

仅考虑中间层神经元的节点,发现,每个神经元的输出都成为其他神经元的输入,每个神经元的输入都来自于其他神经元。神经元输出的数据经过其他神经元之后最终又反馈给自己。

 Hopfield网络的稳定性

Hopfield网络按神经动力学的方式运行,工作过程为状态的演化过程,对于给定的初始状态,按”能量“减小的方式演化,最终达到稳定状态。

动力系统:指按时间发展的系统
非线性动力学:是研究非线性动力系统的各种运动状态的定性和定量变化规律(即动力学特性),尤其是系统长期行为。

对于反馈网络来说,稳定性是至关重要的性质,但反馈网络不一定都能稳定收敛。网络从初态开始,经过有限次递归之后,如果其状态不再发生变化,则称该网络是稳定的。网络状态最终会收敛到一个稳定的值,因此是稳定的。

不稳定的网络往往是发散到无穷远的系统,在离散Hopfield网络中,由于输出只能取二值化的值,,因此不会出现无穷大的情况,此时,网络出现有限幅度的自持震荡,在有限个状态中反复循环,称为有限环网络

在有限环网络中,系统在确定的几个状态中循环往复。系统也可能不稳定收敛于一个确定状态,而是在无限多个状态之间变化,但轨迹并不发散到无穷远,这种现象称为混沌。

如果Hopfield网络是稳定的,则称一个或者若干个稳定的状态时的解)为网络的吸引子,能最终演化为该吸引子的初始状态集合,称为该吸引子的吸引域。

设计离散Hopfield网络

Hopfield网络可以用于联想记忆,因此又称联想记忆网络。与人脑的联想记忆功能类似,Hopfield网络实现联想记忆需要两个阶段:

1、记忆阶段:在记忆阶段,外界输入的数据,使得系统自动调整网络的权值,最终用合适的权值使系统具有若干个稳定状态,即吸引子。其吸引域半径定义为吸引子所能吸引的状态的最大距离。吸引域半径越大,说明联想能力越强。联想记忆网络的记忆容量定义为吸引子的数量。

2、联想阶段:在联想阶段,对于给定的输入模式,系统经过一定的演化过程,最终稳定收敛于某个吸引子。

网络中神经元的个数与输入向量长度相同。初始化完成后,根据下式反复迭代,直到神经元的状态不发生改变为止。此时输出的吸引子就是对应输入进行联想的返回结果。

完成联想记忆的关键在于恰当的学习算法得到网络的权值。常见的学习算法有外积法(Outer Product Method),投影学习法(Production Learning Method),伪逆法(Pseudo Inverse Method)和特征结构法(Eigen Structure Method)。

2.代码


%% 清空环境变量
clc
clear
%% 数据导入
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_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)')

 

3.运行结果

5298417407f340ccb142d39569ebee06.png

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode---350周赛

题目列表 6901. 总行驶距离 6890. 找出分区值 6893. 特别的排列 6447. 给墙壁刷油漆 一、总行驶距离 很显然,这题单纯就是一道数学应用题,我们要明白最关键的一点 :只有当mainTank>5并且additionalTank>0时,才能发生副油…

操作系统 - 操作系统结构

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

【Kubernetes资源篇】StatefulSet无状态服务管理入门实战详解

文章目录 一、StatefulSet理论知识1、StatefulSet Pod控制器特性2、什么是有状态服务和无状态服务?3、Deployment和StatefulSet区别 二、案例:StatefulSet资源实战演示1、创建WEB站点并验证StatefulSet特点2、StatefulSet滚动更新 三、总结 一、Stateful…

JavaFX第四篇 Button按钮和事件处理

JavaFX第四篇 Button按钮和事件处理 1. 代码2. 讲解3. 代码仓库 上一篇我们讲解了Hello World演示,主要用到Label标签的功能, 这里我们要介绍的是最常用的控件之一:按钮 在现在的软件开发过程中还没发现没有用到按钮的应用, 基本上…

【数据库原理与实践】第八章至第十章作业汇总(更新中)

填空题部分: Chp 8 安全性与完整性 part 1: 数据库的安全性是指保护数据库以防止不合法的使用所造成的( 数据泄露、更改或破坏 )。计算机系统有三类安全性问题,即( 技术安全 )、管理安全和…

ROS:计算图

目录 一、ROS计算图简介二、节点(Node)三、节点管理器(Master)四、消息(Message)五、话题(Topic)六、服务(Service)七、动作(Action)八…

LabVIEW开发燃油阀自动性能测试系统

LabVIEW开发燃油阀自动性能测试系统 燃油阀是航空燃油控制系统的核心部件。燃油阀的流量滞后直接影响控制精度、稳定性和可靠性,而燃油阀生产的性能测试是至关重要的步骤。但是,由于流动滞后是非线性的,因此很难控制和进行实时测试。随着厂家…

CSS3-浮动

(了解)标准流:又称文档流,是浏览器在渲染显示网页内容时默认采用的一套排版规则,规定了应该以何种方式排列元素 常见标准流排版规则: 1. 块级元素:从上往下,垂直布局&am…

Matplotlib---柱形图

1. 绘制简单的柱状图 bar函数用于绘制柱状图。下面是bar函数的语法格式: bar(x, height, width0.8, bottomNone, aligncenter, dataNone, **kwargs)参数解释: x:指定每个柱子的x轴坐标。height:指定每个柱子的高度。width&…

TypeScript ~ 掌握基本类型 ②

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

vue的学习

title: VUE 一、Vue简介 1.1 简介 ::: tip Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式的js框架,发布于 2014 年 2 月。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0…

F. Gardening Friends(树的直径)

Problem - 1822F - Codeforces 两位朋友Alisa和Yuki在他们的花园里种了一棵有n个顶点的树。树是一个无向图,没有循环、回路或多重边。这棵树中的每条边都有一个长度为k。最初,顶点1是树的根。 Alisa和Yuki种植这棵树不仅仅是为了好玩,而是想…

基于SpringBoot的流浪动物救助平台

1.引言 系统管理也都将通过计算机进行整体智能化操作,对于流浪动物救助平台所牵扯的管理及数据保存都是非常多的,例如首页、个人中心、会员管理、志愿者管理、流浪动物信息管理、领养信息管理、取消领养信息管理、志愿团队活动管理、志愿者申请表管理、…

【性能设计篇】数据库拓展

前两篇文章介绍了分布式存储的机制,为保证数据的高性能以及可拓展,采用分片/分区机制。为保证数据的高可用性,采用复制/镜像机制存储数据。一份数据存储多份。而这两种方式在数据中,就是分片/分区机制。分库分表/读写分离。 读写…

掌握这个关键技术,让你的APP开发事半功倍!——Flutter与其他方案的区别

Flutter动机是什么,解决啥痛点?优势在哪里? 介绍Flutter的历史背景和运行机制,并以界面渲染过程为例与你讲述其实现原理。 1 Flutter的历史背景 为不同的操作系统开发拥有相同功能的应用程序,开发人员只有两个选择&…

gitTortoise图形化工具下载步骤

一,简介 本文主要介绍如何下载安装gitTortoise图形化工具来管理和提交代码。 二,步骤介绍 2.1 安装包下载 下载地址:https://download.tortoisegit.org/tgit/ 打开后,界面如下: 点击选择最新的稳定release版本&am…

二分查找算法及实现

概念 二分查找算法也成为折半查找,是一种非常高效的工作于有序数组的查找算法. 实现 需求 现有一个有序数组 arr [1,2,3,4,5,6,7,8,9], 目标值target 2 ,要求返回目标值target在数组arr中的索引,没有则返回-1; 代码实现 private int binarySearch(int[] arr, int target)…

Android加快你的编译速度

工欲善其事,必先利其器。如果每次运行项目都要花费5-10分钟,那人的心态都要崩了。 Gradle构建流程 Gradle 的生命周期可以分为大的三个部分:初始化阶段(Initialization Phase),配置阶段(Configuration Pha…

Linux学习之网络管理和配置文件

在CentOS 7中有两种网络配置方法:SysV(也称为Sys 5)和Systemd。 SysV的命令如下: service network start|stop|restart|status chkconfig --list network Systemd的命令如下: systemctl list-unit-files NetworkManage…

Linux->线程同步

目录 前言: 1 线程同步引入 2 条件变量 2.1 线程饥饿 2.2 条件变量接口 2.3 添加条件变量 3 生产者和消费者模型 前言: 本篇主要讲解了关于线程同步的相关知识,还有生产者和消费者模型的认识和使用。 1 线程同步引入 在讲解线程同步之…