📄 bp.m
字号:
%X为输入样本,T为目标向量
clc,clear,tic
x=rands(8,8);
d=rand(1,8);
[n,P]=size(x) ; %R=2;Q=8为X阵的维数;
[S,l]=size(d) ; %S=1;Q=8为T阵的维数;
q=0;p=1;
m=4;h=0.9;e=1e-10;Erme0=100;Erme=10;dw=zeros(m,l);dv=zeros(n,m);
v=rands(n,m);
w=rands(m,l);
while Erme0>=e & q<5000
q=q+1;
for p=1:P
for j=1:m
netj(j)=-1;
for j1=1:n
netj(j)=netj(j)+v(j1,j)*x(j1,p);
end
y(j)=1/(1+exp(-netj(j)));
end
for k=1:l
netk(k)=-1;
for j1=1:m
netk(k)=netk(k)+w(j1,k)*netj(j1);
end
o(k)=1/(1+exp(-netk(k)));
end
E(p)=0;
for k=1:l
E(p)=E(p)+(d(k)-o(k))^2;
do(k)=(d(k)-o(k))*(1-o(k))*o(k);
end
E(p)=sqrt(E(p));
for j=1:m
dy(j)=0;
for k=1:l
dy(j)=dy(j)+do(k)*w(j,k);
end
dy(j)=dy(j)*(1-y(j))*y(j);
end
for j=1:m
for k=1:l
w(j,k)=w(j,k)+h*do(k)*y(j);
end
end
for i=1:n
for j=1:m
v(i,j)=v(i,j)+h*dy(j)*x(i,p);
end
end
end
Erme1=Erme;Erme=0;
for p=1:P
Erme=Erme+E(p)^2;
end
Erme=sqrt(Erme/P);
Erme0=abs(Erme-Erme1);
end
disp(['期望输出:',num2str(d)])
disp(['实际输出:',num2str(o)])
disp(['输出误差:',num2str(E(p))])
disp(['训练次数:',num2str(q)])
disp('权值W:')
disp(num2str(w))
disp('权值V:')
disp(num2str(v'))
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -