📄 bp.txt
字号:
clear all;
clc
n=16;%输入层个数
p=8;%隐含层个数
q=3;%输出层个数
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];
Y1=[1 0 0];%期望输出
Y2=[0 1 0];
Y3=[0 0 1];
Yo=[Y1;Y2;Y3];
%以下为初始化
w=zeros(16,8);v=zeros(8,3);
t1=zeros(1,8);
t2=zeros(1,3);
bi=zeros(1,8);
ct=zeros(1,3);
dt=zeros(1,3);
ei=zeros(1,8);
cntmax=10000;
a1=0.1,b1=0.1,emax=0.01,cnt=0;
w=rands(16,8); %输入层与隐含层权值
S='输入层到隐含层初始权值';
disp(S);disp(w);
v=rands(8,3); %隐含层与输出层权值
t1=rands(1,8);
t2=rands(1,3);
er=0.012;
for cnt=1:cntmax
if (er>emax)
for cp=1:3
X0=X(cp,:);
Y0=Yo(cp,:);
Y=X0*w;
Y=Y-t1;
for j=1:8
bi(j)=1/(1+exp(-Y(j))); %激活函数
end
%计算输出层各神经元输出
xy=bi*v;
Y=xy;
Y=Y-t2;
for t=1:3
ct(t)=1/(1+exp(-Y(t)));
end
%计算误差函数、调整连接权值
er=(Y0(t)-ct(t))*(Y0(t)-ct(t))/2;
for t=1:3
dt(t)=(Y0(t)-ct(t))*ct(t)*(1-ct(t));
end
for t=1:3
xy=dt*v';
ei=xy*bi'*(1-bi);
end
for t=1:q
for j=1:p
v(j,t)=v(j,t)+a1*dt(t)*bi(j);
end
t2(t)=t2(t)+a1*dt(t);
end
for j=1:p
for k=1:n
w(k,j)=w(k,j)+b1*X0(k)*ei(j);
end
t1(j)=t1(j)+b1*ei(j);
end
end
else break ;
end
end
S='循环次数cnt:';
disp(S);disp(cnt);
S='隐含层到输出层最终权值';
disp(S);disp(v);
S='er:'
disp(S);disp(er);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -