神经网络课程实验三hopfield网络Matlab.docx
《神经网络课程实验三hopfield网络Matlab.docx》由会员分享,可在线阅读,更多相关《神经网络课程实验三hopfield网络Matlab.docx(15页珍藏版)》请在冰豆网上搜索。
神经网络课程实验三hopfield网络Matlab
神经网络课程实验三hopfield网络(Matlab)
————————————————————————————————作者:
————————————————————————————————日期:
实验三Hopfield网络学习算法的简单应用
1.不同印刷版本数字8的识别
一.实验目的
1.加深对Hopfield网络学习算法的理解
2.通过实验了解Hopfield学习算法的工作原理
3.通过上机实验掌握具体的实现方法
二.实验原理
Hopfield网络
Hopfield网络是一种具有全互联结构的递归神经网络,其具有反馈机制的非线性动力学系统,反映了生物神经系统结构的复杂性。
该网络一般分为离散型(DHNN)和连续型(CHNN)两种,其标准的网络能量函数可以表示为:
.式中:
是神经元i和神经元j的连接权值;
是神经元i的输入阈值;
和
分别是神经元i和神经元j的输出值。
在满足一定条件下,能量函数的能量在网络运行过程中不断减小,最后趋于稳定的平衡状态。
Hopfield 网络自提出以来,已成功应用于多个方面。
网络的定义
一个 n阶的Hopfield 网络是一个五元组:
其中:
1)GF:
规定DHN(n) 拓扑结构的扩展模糊图:
其中,N(GF)={Ni(θi)∣1≤i≤n}是非空神经元集合,每一个神经元Ni附有阈值θi;E(GF) ={eij∣1≤i,j≤n}是边的集合,eij是Ni→Nj的边;A(GF)= (wij)n⨯n是联系矩阵,wij是Ni→Nj 的联系效率。
2)IF⊆N(GF):
输入域。
3)OF⊆N(GF):
输出域。
4)WA:
工作算法,令oi(t)∈ {-1,1} 为Ni在t 时刻的状态,o(t)=(o1(t),o2(t),…,on(t))T为N(GF)在t时刻的状态向量(t=0,1,2,…),则:
其中,oI∈{-1,1}nI⨯1(nI≤n)和oO∈{-1,1}nO⨯1(nO≤n)分别为IF和OF的状态向量。
5)OA:
自组织算法
对Hopfield 网络而言,一般情况下,IF=OF=N(GF),即:
oI=oO=o。
实际上,给定神经元的阈值和神经元之间的联系效率即可唯一地确定一个Hopfield 网络,给定神经元的阈值和神经元之间的联系效率即可唯一地确定一个Hopfield网络。
因此,一个n阶的Hopfield网络可简记为:
。
其中:
1)ﻩW= A(GF):
DHN(n)联系矩阵。
2) Θ=(θ1,θ2,…,θn)T:
DHN(n)阈值向量
N阶DHN 拓扑结构
工作算法
Hopfield 网络的工作模式:
设N为n 阶Hopfield 网络DHN(n) 每一时刻需要调整其状态的神经元的数量,则按 N的数量:
a.串行模式 (SerialMode):
N=1
b.并行模式(ParallelMode):
N≥2.(部分并行模式和全并行模式)
按每一时刻选择 DHN(n) 需要调整其状态的神经元的方式的不同,又可分为:
c.确定模式(Deterministic Mode)
d.随机模式(Random Mode)
对于Hopfield网络的工作算法 WA:
如果在给定的离散时刻 t∈{0,1,2,…},NSk(k∈{1,2,…,m}的选择则是随机地,则WA为随机工作模式,否则,为确定性工作模式。
如果∀k∈{1,2,…,m},|Ik| =1,即每一个集合 NSk (k∈{1,2,…,m}中只有一个神经元,则WA为串行模式;如果m=1,则 WA 为全并行模式;如果∃k∈{1,2,…,m},1<|Ik|Hopfield网络记忆或学习
Hopfield网络的运行过程是将初始状态转移至稳定状态的过程。
Hopfield 网络由初始状态运行至稳定状态的过程可以被理解为神经系统的联想记忆过程。
稳定状态就是Hopfield 网络记忆的内容。
外积法 (OuterProduct Method) 是Hopfield网络综合设计方法之一。
该方法源于Hebb学习律。
Hebb学习律:
设有一个n维的Hopfield 网络DHN(n),对任意 i,j∈{1,2,…,n},若DHN(n) 的状态值oi和oj符号相同,即DHN(n)的神经元Ni和Nj同时处于兴奋或抑制,则它们的联系效率wij应该得以加强,反之, wij 应该减弱。
外积法
(1):
向量形式为:
。
外积法
(2):
相应的向量形式为:
三.实验内容
以数字8为例,选择N个不同印刷字体的8,编码后对其进行正交化,然后将其作为范例集合Exemplar={O(s)|s=1,2,…,N}中的范例。
a.编码:
O(9)= (-1,-1,-1,-1,-1,1,1,…)T
b.构造 Hopfield网络:
目标是识别8
c.验证范例的可识别性以及考察非范例的含噪声模式的可识别性
本次实验共准备了7种不同印刷体的8,并对他们进行了逐一编码,令1代表白,-1代表黑。
从而得到整合后的目标向量,并对他们设计相应的hopfield神经网络。
接下来依次读入待测试的印刷体8以及含噪声的印刷体8,如下:
利用之前设计好的神经网络对其进行仿真,得到结果如下所示:
通过上图我们可以看到,仿真结果1为对测试样本的识别,可以很好地呈现出数字8.仿真结果2为对含噪样本的识别,,大体上可以看到8的形状,相对于原图,去除了一些噪点。
Hopfield网络可以很好地对范例进行识别,对含噪图可以进行大体上的识别。
四.附录
clear;
clc;
%读入数字图片,为个人用画图板制作的图片
x=imread('08.bmp');
d=size(x);
%彩色转灰度图
iflength(d)==3
I=rgb2gray(x);
else
I=x;
end
I0=featureC(I);
I00=I0';
x = imread('18.bmp');
d=size(x);
%彩色转灰度图
iflength(d)==3
I=rgb2gray(x);
else
I=x;
end
I1 = featureC(I);
I11=I1';
x=imread('28.bmp');
d=size(x);
%彩色转灰度图
iflength(d)==3
I=rgb2gray(x);
else
I=x;
end
I2 = featureC(I);
I22 = I2';
x= imread('38.bmp');
d=size(x);
%彩色转灰度图
iflength(d)==3
I= rgb2gray(x);
else
I=x;
end
I3 =featureC(I);
I33=I3';
x=imread('48.bmp');
d=size(x);
%彩色转灰度图
iflength(d)==3
I=rgb2gray(x);
else
I=x;
end
I4=featureC(I);
I44= I4';
x=imread('58.bmp');
d=size(x);
%彩色转灰度图
if length(d)==3
I=rgb2gray(x);
else
I=x;
end
I5=featureC(I);
I55= I5';
x =imread('68.bmp');
d=size(x);
%彩色转灰度图
if length(d)==3
I=rgb2gray(x);
else
I=x;
end
I6 =featureC(I);
I66=I6';
%总的目标向量
T=[I00I11 I22 I33I44I55I66];
%设计hopfield网络
net=newhop(T);
%定义测试样本
x=imread('test8.bmp');
d=size(x);
%彩色转灰度图
if length(d)==3
I=rgb2gray(x);
else
I=x;
end
Itest=featureC(I);
Itest1 =Itest';
x =imread('test188.bmp');
d=size(x);
%彩色转灰度图
iflength(d)==3
I=rgb2gray(x);
else
I=x;
end
Itest= featureC(I);
Itest2=Itest';
%网络仿真
for i=1:
16
T=[I00(:
,i) I11(:
i) I22(:
i) I33(:
,i) I55(:
,i) I66(:
i)];
net=newhop(T); %设计hopfield网络
y1(:
i)=sim(net,1,[],Itest1(:
i));
end
fori=1:
8
for j=1:
16
ify1(i,j)<=0
y1(i,j)=-1;
else
y1(i,j)=1;
end
end
end
fori=1:
16
T=[I00(:
i)I11(:
,i)I22(:
i)I33(:
,i)I55(:
i)I66(:
i)];
net=newhop(T); %设计hopfield网络
y2(:
i)=sim(net,1,[],Itest2(:
i));
end
fori=1:
8
forj=1:
16
ify2(i,j)<=0
y2(i,j)=-1;
else
y2(i,j)=1;
end
end
end
subplot(3,4,1);
figt(I00);
%figure,imshow(I0);
title('待试图片08')
subplot(3,4,2);
figt(I11);
%figure,imshow(I1);
title('待试图片18')
subplot(3,4,3);
figt(I22);
%figure,imshow(I2);
title('待试图片28')
subplot(3,4,4);
figt(I33);
%figure,imshow(I3);
title('待试图片38')
subplot(3,4,5);
figt(I44);
%figure,imshow(I4);
title('待试图片48')
subplot(3,4,6);
figt(I55);
%figure,imshow(I5);
title('待试图片58')
subplot(3,4,7);
figt(I66);
%figure,imshow(I6);
title('待试图片68')
subplot(3,4,8);
figt(Itest1);
%figure,imshow(Itest); %绘制测试样本二值化图像
title('测试样本')
subplot(3,4,9);
%figure,imshow(y);%绘出仿真输出二值化图像
figt(y1); %绘出仿真输出二值化图像
title('仿真结果1')
subplot(3,4,10);
figt(Itest2);
%figure,imshow(Itest);%绘制测试样本二值化图像
title('含有噪声的样本')
subplot(3,4,11);
%figure,imshow(y);%绘出仿真输出二值化图像
figt(y2); %绘出仿真输出二值化图像
title('仿真结果2')
functionfigt(t)
holdon
axis square%以当前坐标轴范围为基础,将坐标轴区域调整为方格形
forj=1:
16
for i=1:
8
ift((j-1)*8+i)<0
fill([ii+1i+1i],[17-j 17-j18-j18-j],'k')
else
fill([ii+1i+1i],[17-j 17-j 18-j18-j],'w')
end
end
end
holdoff
functionI=featureC(x)
%将图片数据转化为1,-1矩阵
略