神经网络拟合函数的小例题

刚开始学神经网络 以前也没接触过 看了书感觉晕晕的 希望能通过一个简单例题的形式学习一下 另外如果有很好的书 可以用简单的方式讲解神经网络的 帮我推荐下。有好的例题也帮忙发一个 谢谢啦!从网上找到一个例题:
已知某系统输出y与输入x的部分对应关系为下表所示,设计一BP神经网络,完成y=f(x)的曲线拟合。

人工神经网络第一次作业

题目:使用函数
sin(
)
au
t
e
cu



试验
MATLAB
中的
BP
算法

1
、改变不同训练算法,观察效果;

2
、改变参数
a,c
的值,观察效果;

3
、改变隐层神经网络个数,观察效果;

4
、尝试:加入噪声的训练效果。

一、改变不同训练算法,观察效果


MATLAB
中,
BP
网络的训练函数一共有以下几种,改变不同训练算法,
观察效果就是在其他参数不变只改变程序中训练函数的情况下,
得到不同训练算
法的训练结果。

训练方法

训练函数

梯度下降法

traingd
有动量的梯度下降法

traingdm
自适应
lr
梯度下降法

traingda
自适应
lr
动量梯度下降法

traingdx
弹性梯度下降法

trainrp
Fletcher-Reeves
共轭梯度法

traincgf
Ploak-Ribiere
共轭梯度法

traincgp
Powell-Beale
共轭梯度法

traincgb
量化共轭梯度法

trainscg
拟牛顿算法

trainbfg
一步正割算法

trainoss
Levenberg-Marquardt


trainlm

由于这只是改变程序中的训练算法,
其他不变,
所以为了简洁,
在本程序中
只选取了四种训练算法,
分别是梯度下降法
traingd

弹性梯度下降法
trainrp


牛顿算法
trainbfg

Levenberg-Marquardt

trainlm
,只更改不同的训练算法来
构造节点,程序如下,得到不同训练算法下的仿真图如图
1
所示。

clear
all
;

close
all
;

clc;

a=1,c=1;
%
在此改变
a,c
的值

layer_number=20;
%
在此改隐含层的个数

u=-4:0.001:4;

t=exp(-a*u).*sin(c*u);
%
这里是矩阵相乘,要用点乘

net=newff(minmax(u),[layer_number,1],{
'tansig'
,
'purelin'
},
'traingd'
);
%
梯度下降法

y1=sim(net,u);
%
未训练直接输出

net1=newff(minmax(u),[layer_number,1],{
'tansig'
,
'purelin'
},
'traingd'
)
;
%
梯度下降法

net2=newff(minmax(u),[layer_number,1],{
'tansig'
,
'purelin'
},
'trainrp'
)
;
%
弹性梯度下降法

net3=newff(minmax(u),[layer_number,1],{
'tansig'
,
'purelin'
},
'trainbfg'
);
%
拟牛顿算法

net4=newff(minmax(u),[layer_number,1],{
'tansig'
,
'purelin'
},
'trainlm'
)
;
%Levenberg-Marquardt

net.trainParam.show = 50;

net.trainparam.epochs=1000;

net.trainparam.goal=0.01;

net1=train(net1,u,t);
%
采用梯度下降法训练节点

net2=train(net2,u,t);
%
采用弹性梯度下降法训练节点

net3=train(net3,u,t);
%
采用拟牛顿算法训练节点

net4=train(net4,u,t);
%
采用
Levenberg-Marquardt
法训练节点

y2_1=sim(net1,u);

y2_2=sim(net2,u);

y2_3=sim(net3,u);

y2_4=sim(net4,u);

subplot(2,2,1)

plot(u,t,
'b--'
,u,y1,
'g:'
,u,y2_1,
'r-'
);

title(
'1
、采用梯度下降法的仿真结果图
'
);xlabel(
'input_u'
);ylabel(
'output_y'
);

legend(
'
目标函数曲线
'
,
'
未经训练
BP
网络逼近曲线
'
,
'
训练后的
BP
网络逼近曲线
'
);

subplot(2,2,2)

plot(u,t,
'b--'
,u,y1,
'g:'
,u,y2_2,
'r-'
)

title(
'2
、采用弹性梯度下降法的仿真结果图
'
);xlabel(
'input_u'
);ylabel(
'output_y'
);

legend(
'
目标函数曲线
'
,
'
未经训练
BP
网络逼近曲线
'
,
'
训练后的
BP
网络逼近曲线
'
);

subplot(2,2,3)

plot(u,t,
'b--'
,u,y1,
'g:'
,u,y2_3,
'r-'
)

title(
'3
、采用拟牛顿算法的仿真结果图
'
);xlabel(
'input_u'
);ylabel(
'output_y'
);

legend(
'
目标函数曲线
'
,
'
未经训练
BP
网络逼近曲线
'
,
'
训练后的
BP
网络逼近曲线
'
);

subplot(2,2,4)

plot(u,t,
'b--'
,u,y1,
'g:'
,u,y2_4,
'r-'
)

title(
'4
、采用
Levenberg-Marquardt
法的仿真结果图
'
);xlabel(
'input_u'
);ylabel(
'output_y'
);

legend(
'
目标函数曲线
'
,
'
未经训练
BP
网络逼近曲线
'
,
'
训练后的
BP
网络逼近曲线
'
);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-29

最简单的拟合方法就是利用matlab中的NNTool工具箱,无论是知道拟合曲线的形式还是不知道,都可以用NNTool工具箱。我做出来的拟合曲线即相关参数,拟合图像分别如下图。

讲解BP神经网络比较好的书有:MATLAB神经网络:从零开始》(共上下两册)和

《MATLAB 神经网络30个案例分析》

第2个回答  2011-07-27
你这个问题其实我回答过,你可以参考:http://zhidao.baidu.com/question/278670230.html本回答被提问者采纳
相似回答