求教matlab神经网络拟合

我有一大串数据,需要弄成一个函数曲线,如何用神经网络拟合。大神加Q详聊。感激不尽。1902811905。满意的话有偿也可... 我有一大串数据,需要弄成一个函数曲线,如何用神经网络拟合。大神加Q详聊。感激不尽。1902811905。满意的话有偿也可 展开
 我来答
志当存高远389
2015-06-03 · 知道合伙人互联网行家
志当存高远389
知道合伙人互联网行家
采纳数:11237 获赞数:20406
08年毕业,一直从事计算机行业,从基层做起。有较强的实践操作能力。

向TA提问 私信TA
展开全部
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 %e孩长粉短莠的疯痊弗花nd 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.
追问
Attempted to access c(16,:); index out of bounds because size(c)=[15,3].

Error in b (line 30)
R(i,j)=((x(i,:)-c(j,:)))*((x(i,:)-c(j,:))');
这是什么意思
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式