MATLAB进行人工神经网络拟合求助

问题描述:

MATLAB进行人工神经网络拟合求助
现有一种合金由A,B,C三种元素及杂质组成
测试5次
A百分含量 [7.1 7.0 6.9 6.8 7.2]
B百分含量 [3.2 3.4 3.6 3.8 4.0]
C百分含量 [2.5 2.9 3.1 2.6 2.2]
测试结果:硬度[78 65 78 69 72]
想用BP神经网络进行拟合,得到5个预测结果,然后和实测的硬度进行比较.
请高手教教我,用MATLAB的
1个回答 分类:综合 2014-10-12

问题解答:

我来补答
tic; %计时开始
clc; %清屏
clear all; %清除所有变量
disp('输入层神经元个数:3'); %显示输入层神经元个数
input=3;
disp('中间层神经元个数:3'); %显示中间层神经元个数
middle=3;
disp('输出层神经元个数:1'); %显示输出层神经元个数
output=1;
disp('输入模式1 2 3及其对应的输出:');
x1=[7.1 3.2 2.5];
x2=[7.0 3.4 2.9];
x3=[6.9 3.6 3.1];
x4=[6.8 3.8 2.6];
x5=[7.2 4.0 2.2];
y1=78;y2=65;y3=78;y4=69;y5=72;
disp('形成一张供调用的向量表:');
X=[x1;x2;x3;x4;x5]; %x1,x2,x3,x4,x5向量表
X=X/10;
Yo=[y1;y2;y3;y4;y5]; %y1,y2,y3,y4,y5向量表
Yo=Yo/100;
disp('初始化连接权矩阵:');
w=zeros(input,middle); %输入层与中间层的连接权
v=zeros(middle,output); %中间层与输出层的连接权
th1=zeros(1,middle); %中间层的阈值
th2=zeros(1,output); %输出层的阈值
out_middle=zeros(1,middle); %中间层的实际输出
out_output=zeros(1,output); %输出层的实际输出
delta_output=zeros(1,output); %输出层的差值
delta_middle=zeros(1,middle); %中间层的差值
disp('显示初始化连接权矩阵w:');
w=rands(input,middle); %初始化连接权矩阵w(i,j)
disp(w); %显示初始化连接权矩阵w(i,j)
disp('显示初始化连接权矩阵v:');
v=rand(middle,output); %初始化连接权矩阵v(j,t)
disp(v); %显示初始化连接权矩阵v(j,t)
disp('中间层阈值矩阵th1:');
th1=rand(1,middle); %初始化中间层阈值矩阵th1
disp(th1); %显示中间层阈值矩阵th1
disp('中间层阈值矩阵th2:');
th2=rand(1,output); %初始化输出层阈值矩阵th2
disp(th2); %显示中间层阈值矩阵th2
sample_bumbers=5; %样本数
max_times=10000; %最大训练次数
times=0; %训练次数
eta=0.1; %学习系数eta
gamma=0.1; %学习系数gamma
sample_pointer=0; %样本数指针
error=0.02; %误差
error_max=0.01; %最大误差
for times=1:max_times %begin for External Loop
if error>error_max
for sample_pointer=1:sample_bumbers
X0=X(sample_pointer,:);
Y0=Yo(sample_pointer,:);
Y=X0*w;
%计算中间层的输出:
Y=Y-th1;
for j=1:middle
out_middle(j)=1/(1+exp(-Y(j)));
end
%计算输出层输出:
Y=out_middle*v;
Y=Y-th2;
for k=1:output %k=1:3
out_output(k)=1/(1+exp(-Y(k)));
end
error=(Y0(k)-out_output(k))*(Y0(k)-out_output(k))/2;
%计算输出层校正误差delta_output:
for k=1:output %k=1:3
delta_output(k)=(Y(k)-out_output(k))*out_output(k)*(1-out_output(k));
end
%计算中间层校正误差delta_middle:
for k=1:output %k=1:3
xy=delta_output*v';
delta_middle=xy*out_middle'*(1-out_middle);
end
%计算下一次的中间层和输出层之间的连接权v(j,k),阈值th2(k)
for k=1:output;
for j=1:middle
v(j,k)=v(j,k)+eta*delta_output(k)*out_middle(j);
end
th2(k)=th2(k)+eta*delta_output(k);
end
%计算下一次的输入层和中间层之间的连接权w(i,j),阈值th1(j)
for j=1:middle;
for i=1:input
w(i,j)=w(i,j)+gamma*X0(i)*delta_middle(j);
end
th1(j)=th1(j)+gamma*delta_middle(j);
end
end %end for if
else
break;
end %end for else
end %end for External Loop
disp('显示结果:');
disp('训练次数times:');disp(times);
disp('输出权值w');disp(w);
disp('输出权值v');disp(v);
disp('全局误差error:');disp(error);
disp('运行结束了!');
toc; %计时结束,并输出程序的运行时间
输出结果为:
输入层神经元个数:3
中间层神经元个数:3
输出层神经元个数:1
输入模式1 2 3及其对应的输出:
形成一张供调用的向量表:
初始化连接权矩阵:
显示初始化连接权矩阵w:
0.5695 -0.6483 -0.6946
-0.0573 0.4435 -0.3178
-0.9285 -0.0530 0.2148
显示初始化连接权矩阵v:
0.1917
0.7384
0.2428
中间层阈值矩阵th1:
0.9174 0.2691 0.7655
中间层阈值矩阵th2:
0.1887
显示结果:
训练次数times:
6
输出权值w
0.5376 -0.6779 -0.7311
-0.0736 0.4283 -0.3365
-0.9406 -0.0643 0.2009
输出权值v
0.1328
0.6708
0.2027
全局误差error:
0.0097
运行结束了!
Elapsed time is 0.263732 seconds.
 
 
展开全文阅读
剩余:2000
上一页:dc2inr3qec3r2
下一页:这样怎么写