hbgskick 发表于 2010-7-1 13:35:38

自己写的BP神经网络拟合曲线的例子

本帖最后由 hbgskick 于 2010-7-6 01:44 编辑

这个简单的程序是为了了解下BP网络对多次曲线的拟合能力,来看看其能力到底如何.
clc
clear
p=-1:0.1:1;
t=[-0.96 -0.577 -0.0729 0.377 0.641 0.66 0.461 0.1336 -0.201 -0.434 -0.5 -0.393 -0.1647 0.0988 0.3072 0.396 0.3449 0.1816 -0.0312 -0.2183 -0.3201];
%输入数据,为任意一高次曲线上所取的21个点,为图中的红点
net=newff(minmax(p),,{'tansig','logsig','purelin'},'traingd'); %采用三层神经网络
net.trainParam.epochs=1000;      %训练次数,本例分别取了1000,5000,10000三种
net.trainParam.goal=9.5238e-0016;%误差目标
net.trainParam.lr=0.2            %学习速率,不宜过大,否则发散
%net.iw{1,1}=[ 6.9425 -7.0343 6.9925 -6.9994 7.0521]';   %初始权值,可以设定初始值直接使用
%net.lw{2,1}=;
%net.b{1,1}=[-7.0574 3.4264 0.0017 -3.4974 6.9461]';   %初始偏置值
%net.b{2,1}=
=train(net,p,t);                                 %训练网络
y=sim(net,p);                                          %用训练好网络计算
plot(p,t,'ro')
plot(p,t,'ro',p,y)
xlabel('输入值');ylabel('输出值');
legend('原始数据','训练1000次');

以上是修改训练次数对网络精度的影响,同时可以适当修改网络的学习速率,提高网络的收敛速度。对于已经训练好的网络,还可以保存其权值和偏置值,如程序中net.iw{1,1}和net.b{1,1},以便下次可以直接调用。

messenger 发表于 2010-7-1 14:23:50

举例子最好将来龙去脉交带清楚。比如就本例而论,需要拟合的模型、拟合后的模型,以及最后的结果(最好有图),即lz提到的“来看看其能力到底如何“,都写一下就最好了,这样的加分也会多一些。

hbgskick 发表于 2010-7-6 01:45:30

谢谢版主意见!

linuxp 发表于 2010-7-19 22:11:23

本帖最后由 lengyunfeng 于 2010-7-20 07:41 编辑

请问我的数据X=
Y=怎么按你的方法进行拟合,得到你的效果行不?

hbgskick 发表于 2010-8-4 10:25:28

本帖最后由 hbgskick 于 2010-8-4 10:29 编辑

对于你这组数据需要先归一化,如下:
clc
clear
X=;%输入
Y=;%输出
=premnmx(X,Y);%归一化
p=Pn;
t=Tn;
net=newff(minmax(p),,{'tansig','logsig','purelin'},'traingd');
net.trainParam.epochs=1000;
net.trainParam.goal=9.5238e-0016;
net.trainParam.lr=0.2

%net.iw{1,1}=[ 6.9425 -7.0343 6.9925 -6.9994 7.0521]';
%net.lw{2,1}=;
%net.b{1,1}=[-7.0574 3.4264 0.0017 -3.4974 6.9461]';
%net.b{2,1}=

=train(net,p,t);
y=sim(net,p);
plot(p,t,'ro')

plot(p,t,'ro',p,y)

xlabel('输入值');ylabel('输出值');
legend('原始数据','训练1000次');

ansys平安 发表于 2010-8-6 09:36:51

请教一下楼主 学习速率在什么范围之内比较合适?

hbgskick 发表于 2010-8-7 11:41:28

学习速率没有一定的标准,一般的只要你训练的时候误差是收敛的就行了。一般的情况下,如果不收敛的话,你就需要调整学习速率,适当的减小。我看到一些书上建议不要大于0.4的,忘了是那本书了。但我觉得一般视情况而定,如果数据不多,用不了多长时间,还是把速率调小些为好,这样不会跳过一些收敛域。
当然,你也可以试试自适应的速率,或附加惯动量法。

starbinbin_csu 发表于 2010-8-23 19:21:59

我一直有一个疑问,就是神经网络对曲线进行拟合后能不能得到曲线的近似表达式呢?如果不能的话,这种拟合有什么意义呢?

hymalayas 发表于 2010-8-24 08:30:35

是啊,我也有这样的疑问,这样拟合出来,有什么用呢?

麻烦lz给解释一下,谢谢了

subway96 发表于 2010-8-31 06:30:03

可以的
权值和阀值、转换函数,就确定了一个解析的表达式。

cat0924 发表于 2011-3-26 13:05:03

拟合之后如何显示曲线的函数表达啊 具体是什么语句?

zhengxing2000 发表于 2011-3-26 13:09:43

5# hbgskick


你好,为什么在做仿真的时候要对数据进行归一化处理?一般在什么情况下需要归一化处理?这个不明白,希望指点。谢谢。

liushuangq05 发表于 2011-3-26 18:23:16

这个例子是 丛爽老师书上的, 希望楼主以后给予引用出处!

cat0924 发表于 2011-3-28 11:47:11

可以的
权值和阀值、转换函数,就确定了一个解析的表达式。
subway96 发表于 2010-8-31 06:30 http://forum.simwe.com/images/common/back.gif请问具体用什么语句能把拟合的曲线表达成函数关系式?谢谢

heyang854963 发表于 2011-4-16 20:42:30

14# cat0924 我也非常想知道,到底用什么样的语句可以输出这个函数!求大仙指教!!感激不尽!

asd993415 发表于 2012-3-20 22:18:41

这这就是画图嘛~
页: [1]
查看完整版本: 自己写的BP神经网络拟合曲线的例子