📄 bp hanshunihe.m
字号:
clear
bz=3;
P=-2:0.1:2; t=1+sin(bz*pi*P*0.25); [R,Q]=size(P);%{P,t}为训练集
alfa=0.1; epsi=1.0e-7; emax=0;
S=3;%神经元数目
i=0;j=0;k=0;
flag=0;%记录上次最大误差emax
%w1=[-0.27;-0.41];b1=[-0.48;-0.13];%
%w2=[0.09,-0.17];b2=[0.48];%
w1=rand(S,R)*0.5;b1=rand(S,1)*0.5;
w2=rand(1,S)*0.5;b2=rand(1,1)*0.5;
while 1>0
i=i+1;j=j+1;
%向前传播
a0=P(:,i);
a1=logsig(w1*a0+b1);
a2=w2*a1+b2;
e=t(i)-a2;
if abs(e)>emax
emax=abs(e);
end
%误差最小时,迭代停止
if i==Q
if abs(emax-flag)>epsi
flag=emax;
else
break;
end
emax=0;
i=0;
end
%逼近优良时,迭代停止
if abs(e)<=epsi
k=k+1;
else
k=0;
end
if k==Q
break;
end
%计算敏感性
s2=-2*e;
s1=diag((1-a1).*a1)*(w2)'*s2;
%更新权值矩阵及偏执值
w2=w2-alfa*s2*(a1)';
b2=b2-alfa*s2;
w1=w1-alfa*s1*(a0)';
b1=b1-alfa*s1;
end
%
x=-2:0.01:2; y=1+sin(bz*pi*x*0.25);
plot(x,y,'k-')
gtext('y=1+sin(x)')
%
f=[];
for i=-2:0.01:2
f=[f,w2*logsig(w1*i+b1)+b2];
end
hold on
plot(x,f,'b-')
gtext('Netural network ')
%
a=polyfit(P,t,5);
y1=a(1)*x.^5+a(2)*x.^4+a(3)*x.^3+a(4)*x.^2+a(5)*x+a(6);
hold on
plot(x,y1,'r--')
gtext('duo xiang shi')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -