BP神经网络matlab示例程序

clc
clear
x=[0.8 0.5 0;0.9 0.7 0.3;1.0 0.8 0.5;0 0.2 0.3;0.2 0.1 1.3;0.2 0.7 0.8];
y=[0 1;0 1;0 1;1 0;1 0;1 0];
OUT_COUT =2; %输出向量维数
IN_COUT =3; %输入向量维数
COUT =6; %样本数量

%BP神经网络初始化
h=8;%隐层数量
v=rand(IN_COUT,h);%隐含层权矩阵
w=rand(h,OUT_COUT);%输出层权矩阵
a=0.06;%学习率
b=0.001;%%精度控制
LoopCout=10000;%最大循环次数

e=b+1;
n=1;
yh=zeros(1,h);
out=zeros(1,OUT_COUT);

while e>b && n<LoopCout
e=0;
Chg0=zeros(1,OUT_COUT);
ChgH=zeros(1,h);
Ch_w=zeros(h,OUT_COUT);
Ch_v=zeros(IN_COUT,h);
for i=1:COUT
for k=1:h%计算隐含层输出
temp=0;
for j=1:IN_COUT
temp=temp+x(i,j)*v(j,k);
end
yh(k)=sig(temp);
end

for k=1:OUT_COUT%计算输出层输出
temp=0;
for j=1:h
temp=temp+yh(j)*w(j,k);
end
out(k)=sig(temp);
end

for j=1:OUT_COUT%计算输出误差
e=e+(y(i,j)-out(j))^2;
end
if e<b
break;
end
for j=1:OUT_COUT%计算输出层一般化误差
Chg0(j)=out(j)*(1-out(j))*(y(i,j)-out(j));
end
%累加所有样本训练后的该变量
for j=1:h
for k=1:OUT_COUT
Ch_w(j,k)=Ch_w(j,k)+a*yh(j)*Chg0(k);
end
end

%计算隐含层一般化误差
for j=1:h
temp=0;
for k=1:OUT_COUT
temp=temp+w(j,k)*Chg0(k);
end
ChgH(j)=temp*yh(j)*(1-yh(j));
end
%累加所有样本训练后的改变量,消除样本顺序影响
for j=1:IN_COUT
for k=1:h
Ch_v(j,k)=Ch_v(j,k)+a*x(i,j)*ChgH(k);
end
end
%修改权值矩阵
w=w+Ch_w;
v=v+Ch_v;
%%%%%%%%%
n=n+1;
if n>LoopCout
break;
end
if mod(n,10)==0
disp(sprintf('timenum :%5d ErrAll :%12.6f%',n,e));
end
end
end
disp('总循环次数为:')
disp(n)
disp('调整后v矩阵为')
disp(v)
disp('调整后w矩阵为')
disp(w)

%测试部分
for k=1:COUT
for i=1:h
temp=0;
for j=1:IN_COUT
temp=temp+x(k,j)*v(j,i);
end
yh(i)=


sig(temp);
end

for i=1:OUT_COUT
temp=0;
for j=1:h
temp=temp+yh(j)*w(j,i);
end
out(k,i)=sig(temp);
end
end
disp('测试结果:');
disp(out);

你可能喜欢

  • BP神经网络原理
  • 神经网络matlab
  • BP神经网络算法
  • MATLAB网络
  • 动态BP神经网络
  • BP神经网络控制器
  • BP神经网络预测

BP神经网络matlab示例程序相关文档

最新文档

返回顶部