📄 bp.m
字号:
clear all
x1=[1,1]';
x2=[0,0]';
x3=[1,0]';
x4=[0,1]'; %XOR训练样本
d=[1,1,0,0]; %预期输出
x=[x1,x2,x3,x4];
w11=0;w12=0;w21=0;w22=0;w1=0;w2=0; %神经网络权值
w11(1)=rand(1,1);w12(1)=rand(1,1); %随机产生初始权值
w21(1)=rand(1,1);w22(1)=rand(1,1);
w1(1)=rand(1,1);w2(1)=rand(1,1);
a0=0;a1=0;a2=0;
r=0.6; %训练因子
i=1;k=1;
a11=0;a12=0;a01=0;a02=0;a2=0; %各神经元的输出
s1=0;s2=0;s3=0;p=0;
b1=0;b2=0;b3=0; %神经元的阈值
b1(1)=rand(1,1);
b2(1)=rand(1,1);
b3(1)=rand(1,1);
step=0;
e=1;
while abs(e)>0.005
e=0;
for n=x
a01=n(1); %正向传播
a02=n(2);
a11=logsig(a01*w11(k)+a02*w21(k)+b1(k));
a12=logsig(a01*w12(k)+a02*w22(k)+b2(k));
a2=logsig(a11*w1(k)+a12*w2(k)+b3(k));
e=e+(d(i)-a2)^2; %计算误差
s3=-2*(d(i)-a2)*dlogsig(a11*w1(k)+a12*w2(k)+b3(k),logsig(a11*w1(k)+a12*w2(k)+b3(k))); %反向传播
s2=s3*w2(k)*dlogsig(a01*w12(k)+a02*w22(k)+b2(k),logsig(a01*w12(k)+a02*w22(k)+b2(k)));
s1=s3*w1(k)*dlogsig(a01*w11(k)+a02*w21(k)+b1(k),logsig(a01*w11(k)+a02*w21(k)+b1(k)));
w11(k+1)=w11(k)-r*s1*a01; %权值更新
w12(k+1)=w12(k)-r*s2*a01;
w21(k+1)=w21(k)-r*s1*a02;
w22(k+1)=w22(k)-r*s2*a02;
w1(k+1)=w1(k)-r*s3*a11;
w2(k+1)=w2(k)-r*s3*a12;
b1(k+1)=b1(k)-r*s1;
b2(k+1)=b2(k)-r*s2;
b3(k+1)=b3(k)-r*s3;
i=i+1;k=k+1;
end
step=step+1;
i=1;
end
w=[w11(k) w12(k);w21(k) w22(k);w1(k) w2(k)]';
b=[b1(k) b2(k) b3(k)];
disp('最后权矩阵');
w
disp('最后阈值');
b
disp('循环次数:');
step
disp('总误差:');
e
for m=x
disp('输入样本:');
m
a11=logsig(m(1)*w11(k)+m(2)*w21(k)+b1(k));
a12=logsig(m(1)*w12(k)+m(2)*w22(k)+b2(k));
a2=logsig(a11*w1(k)+a12*w2(k)+b3(k));
disp('输出结果:');
a2
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -