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