📄 3-1-1型sigmoid网络.m
字号:
% 改程序构造一个加偏置3-1-1型sigmoid网络
clear all;clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 实验数据
w1 = [1.58 0.67 1.04 -1.49 -0.41 1.39 1.2 -0.92 0.45 -0.76;
2.32 1.58 1.01 2.18 1.21 3.16 1.4 1.44 1.33 0.84;
-5.8 -4.78 -3.63 -3.39 -4.73 2.87 -1.89 -3.22 -4.38 -1.96];
w2 = [0.21 0.37 0.18 -0.24 -1.18 0.74 -0.38 0.02 0.44 0.46;
0.03 0.28 1.22 0.93 0.39 0.96 1.94 0.72 1.31 1.49;
-2.21 -1.8 0.16 -1.01 -0.39 -1.16 -0.48 -0.17 -0.14 0.68];
W = [ones(1,size(w1,2)),ones(1,size(w1,2));w1,w2]; %
a = 1.716;
b = 2/3;
k = 1;
% w = 2*rand(5,1) - 1; % 随机初始化-1~1之间所有的权值
w = [0.5 0.5 0.5 0.5 -0.5]';
J = zeros(1,size(W,2));
while k < 1000
j = round(19*rand(1,1) + 1); % 1~20中的随机数
x = W(:,j); % 随机选择模式
% 目标值设定
if j <= 10
t = 0.9;
else
t = 0.1;
end
netj = x'*w(1:4,1);
yj = (2*a) / (1+exp(-b*netj)) - a;
netk = yj'*w(5,1);
zk = (2*a) / (1+exp(-b*netk)) - a;
J(1,j) = J(1,j) + 1;
erro(J(1,j),j) = (1/2)*(t-zk)^2;
if (1/2)*(t-zk)^2 < 0.00001
break;
else
detak = (t-zk)*zk*(1-zk);
detaj = yj*(1-yj)*w(5,1)*detak;
w(1:4,1) = w(1:4,1) + 0.1*detaj.*x;
w(5,1) = w(5,1) + 0.1*detak.*yj;
end
k = k + 1;
end
step = min(J(:)); % 回合数
for i = 1:step
er(i) = sum(erro(i,:))/20;
end
t = 1:step;
plot(t,er);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -