📄 bpxy.asv
字号:
%******************************初始化各参数**********************************
l=0.1; %取学习步长为0.1
cells=8; %取6个神经元
times=10000; %bp网络学习总次数
w1=rand(cells,4); %取第一层连接权系数初始值为随量, cells*1矩阵
w2=rand(3,cells); %取第二层连接权系数初始值为随量,1*cells矩阵
yw1=rand(cells,1); %取第一层阈值初始为随机量,为%cells*1矩阵
yw2=rand(3,1); %取第二层阈值初始为一随机数
y=rand(3,159); %取输出初始值为1*n的一个随机矩阵
counts=1; %初始化实际学习次数
em=[0.0000000001 0.0000001 0.0000001]; %最大误差
bj=[1 1 1 1 1 1 1 1]';
e=[0 0 0]';
%******************************学习过程*******************************
k=0;
for j=1:159 %bp网络学习的次数times
en=0; %取网络逼近初始误差平方和为0
for n=1:times%对n个样本开始学习
yt1=bpb(j,5:7); %bp网络需要学习的函数yt
x=bpb(j,1:4); %取输入初始值
net1=w1*x'-yw1; %net1为cells*1矩阵
out=logsig(net1); %out为cells*1矩阵,logsig函数用一般算式这里可写成out=1./(1+exp(-net1)')
net2=w2*out-yw2;
y(:,j)=net2; %第a个样本输出即为net2
det2=yt1-y(:,j)'; %输出与期望间的广义误差det2
det1=((det2*(w2))*out).*(bj-out); %广义误差det1为cells*1矩阵
w1=w1+det1*x*l;
w2=w2+(out*det2)'*l; %连接权更新
yw1=-det1*l+yw1;
yw2=-(det2)'*l+yw2; %两层阈值更新
en=en+power((det2)',2)./2; %误差平方和
e(:,j)=en; %画误差时识别每一次误差
for i=1:3
if en(i)<em(i) %设定学习要求:误差小于0.01
k=k+1;
end
end
if k==3
break;
end
counts=counts+1;
end
end
%测试误差
for j=1:159
x=bpb(j,1:4);
net1=w1*x'-yw1;
out=logsig(net1);
net2=w2*out-yw2;
y(:,j)=net2;
yr(:,j)=bpb(j,5:7)';
end
error=(y-yr)./yr;
yb=[1:159];
plot(yb,error);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -