📄 dhnn.m
字号:
function DHNN
%DHNN 利用DHNN网络进行模糊数字卡片的识别
%
% BP_Approximation(hiddennum)构建一个单元数为16的离散Hopfiled网络,利用外积
%规则学习。程序用16位向量表示模糊数字卡片,用数字4和数字7作为两个待存向量,并用表
%示模糊数字的向量对网络进行测试,观察输出结果是否与待存向量一致。
%初始化
n = 16; %网络单元数为16
maxloop = 500; %设最大循环次数为500
t = 1; %初始化循环次数t为1
flag = zeros(1,16); %向量flag用来存储学习过程中的s(t-1)
%输入待存向量进行学习
four = [1 -1 1 -1 1 -1 1 -1 1 1 1 1 -1 -1 1 -1]; %数字4对应的向量
seven = [1 1 1 -1 -1 -1 1 -1 -1 -1 1 -1 -1 -1 1 -1]; %数字7对应的向量
%计算权值矩阵w
w = (four'*four+seven'*seven)/n;
for k = 1:n
w(k,k) = 0; %权值矩阵的对角元素设为0
end
%请用户输入测试样本
while 1
s = input('请输入一个的1*16矩阵,矩阵的元素只能为1或-1:');
if length(s)==n
break;
else
disp('矩阵的大小只能为1*16,请重新输入。');
end
end
%s = [-1 -1 -1 1 -1 -1 1 -1 -1 -1 1 -1 -1 -1 1 -1];
disp('测试向量为');
disp([s(1) s(2) s(3) s(4);...
s(5) s(6) s(7) s(8);...
s(9) s(10) s(11) s(12);...
s(13) s(14) s(15) s(16)]);
while ~isequal(flag,s) && t<maxloop
%向量flag用来存储上一循环的的s(t-1)
flag = s;
%根据DHNN网络的状态方程进行学习
for i = 1:n
v = w(i,:)*s';
if v>0
s(i) = 1;
elseif v<0
s(i) = -1;
else
s(i) = s(i);
end
end
end
%观察输出结果
disp('网络的输出结果为:');
disp([s(1) s(2) s(3) s(4);...
s(5) s(6) s(7) s(8);...
s(9) s(10) s(11) s(12);...
s(13) s(14) s(15) s(16)]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -