📄 bp3.m
字号:
function bp3
clear all;
clc
n=input('输入层神经元个数:');
m=input('中间层神经元个数:');
l=input('输出层神经元个数:');
a1=input('输入学习率alpha:');
b1=input('输入学习率beta:');
mode=input('选择单极或双极函数,单极输入1,双极输入2:');
cntmax=input('最大训练次数选择:');
X1=[1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1];
X2=[0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0];
X3=[1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1];
X=[X1;X2;X3];
if(mode==1)
Y1=[1 0 0];
Y2=[0 1 0];
Y3=[0 0 1];
else
Y1=[1 -1 -1];
Y2=[-1 1 -1];
Y3=[-1 -1 1];
end
Yo=[Y1;Y2;Y3];
bi=zeros(1,m);
ct=zeros(1,l);
dt=zeros(1,l);
emax=0.001;
cnt=0;
w=rands(n,m);
S='初始化连接权为:';
disp(S);
disp(w);
v=rands(m,l);
t1=rand(1,m);
t2=rand(1,l);
er=0.012;
output=zeros(3,3);
for cnt=1:cntmax
if (er>emax)
er=0;
for cp=1:3
X0=X(cp,:);
Y=X0*w;
Y0=Yo(cp,:);
Y=Y-t1;
for j=1:m
if(mode==1)
bi(j)=1/(1+exp(-Y(j)));
else
bi(j)=2/(1+exp(-Y(j)))-1;
end
end
xy=bi*v;
Y=xy;
Y=Y-t2;
for t=1:l
if(mode==1)
ct(t)=1/(1+exp(-Y(t)));
else
ct(t)=2/(1+exp(-Y(t)))-1;
end
end
er=er+sum((Y0-ct).*(Y0-ct))/2;
for t=1:l
if(mode==1)
dt(t)=(Y0(t)-ct(t))*ct(t)*(1-ct(t));
else
dt(t)=(Y0(t)-ct(t))*(1-ct(t)*ct(t))/2;
end
end
xy=dt*v';
if(mode==1)
ei=xy.*bi.*(1-bi);
else
ei=xy.*(1-bi.*bi)/2;
end
for t=1:l
for j=1:m
v(j,t)=v(j,t)+a1*dt(t)*bi(j);
end
t2(t)=t2(t)+a1*dt(t);
end
for j=1:m
for k=1:n
w(k,j)=w(k,j)+b1*X0(k)*ei(j);
end
t1(j)=t1(j)+b1*ei(j);
end
output(cp,:)=ct;
end
else break;
end
end
output=output';
S='训练次数cnt:';
disp(S);
disp(cnt);
S='输出向量:';
disp(S);
disp(output);
S='全局误差er:';
disp(S);
disp(er);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -