📄 bp源程序.txt
字号:
clear%3个输入层,7个隐含层,3个输出层
q=[0 0 0 0.5000 0.5000 0.5000 1.0000 1.0000 1.0000;
0 0.5000 1.0000 0 0.5000 1.0000 0 0.5000 1.0000;
0.1694 0.5726 0.9597 0.5887 0.9839 0 1.0000 0.0081 0.4032];
c=[0.3194 0.4028 0.0278 0.1944 0.3750 0.0972 1.0000 0 0.6111;
0.1899 0.3038 1.0000 0.1519 0.1266 0.2658 0.0380 0 0.2658;
0.1852 0.3704 1.0000 0.1111 0.2963 0.7407 0 0.2593 0.8148];
n=0;
dsum=1;
cha=0;
v=rands(7,3);
z1=rands(7,1);
w=rands(3,7);
zy1=rands(3,1);
con=[1;1;1];
con2=[1;1;1;1;1;1;1];
while dsum>0.0001
for i=1:9
a=q(:,i);
s=v*a+z1;
b=1./(1+exp(-s));
l=w*b+zy1;
cc=1./(1+exp(-l));
j=c(:,i)-cc;
d=j.*cc.*(con-cc);
e=w'*d.*b.*(con2-b);
sl1=abs(rands(1,1));
sl2=abs(rands(1,1));
w=w+sl1*d*b';
zy1=zy1+sl1*d;
v=v+sl2*e*a';
z1=z1+sl2*e;
cha=cha+0.5*(j(1,1).^2+j(2,1).^2+j(3,1).^2);
end
dsum=0;
dsum=dsum+cha./9;
end
我采用得是串行方式对bp网络进行训练,为何训练时误差dsum约来越大??望指教!
======================================
bp源程序
clear
c=load('d:\c.txt');
a=load('d:\a.txt');
c=c';
a=a';
n=0;
dsum=1;
v=abs(randn(3,6)); %输入层至隐含层连接权
z1=randn(3,1);%输入层阈值
z=zeros(3,5);
z(:,1)=z1;
z(:,2)=z1;
z(:,3)=z1;
z(:,4)=z1;
z(:,5)=z1;
s=zeros(3,5);
b=zeros(3,5);
%隐含层至输出层
w=abs(randn(2,3)); %隐含层至输出层连接权
zy1=randn(2,1);%隐含层阈值
zy(:,1)=zy1;
zy(:,2)=zy1;
zy(:,3)=zy1;
zy(:,4)=zy1;
zy(:,5)=zy1;
l=zeros(2,5);
cc=zeros(2,5);
con=[1 1 1 1 1; 1 1 1 1 1];
d=zeros(2,5);
con2=[1 1 1 1 1;1 1 1 1 1;1 1 1 1 1];
SL1=randn(1,1);
SL2=randn(1,1);
while dsum>0.00001
s=v*a+z;
b=1./(1+exp(-s) );
%隐含层至输出层
l=w*b+zy;
cc=1./(1+exp(-l));
%计算误差
j=c-cc;
d=j.*c.*(con-c);
e=w'*d.*b.*(con2-b);
SL1=abs(randn(1,1));
SL2=abs(randn(1,1));
w=w+SL1*d*b';
zy=zy+SL1*d;
v=v+SL2*e*a';
z=z+SL2*e;
dsum=0;
for i=1:2
for j=1:5
dsum=dsum+abs(d(i,j));
end
end
n=n+1;
error(n)=dsum;
end
n1=1:n;
plot(n1,error)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -