找回密码
 注册
Simdroid-非首页
查看: 414|回复: 15

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

[复制链接]
发表于 2010-7-1 13:35:38 | 显示全部楼层 |阅读模式 来自 湖北武汉
本帖最后由 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),[5,15,1],{'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}=[0.3603 -0.1654 -0.1746 -0.0214 0.2173];
%net.b{1,1}=[-7.0574 3.4264 0.0017 -3.4974 6.9461]';     %初始偏置值
%net.b{2,1}=[0.2160]
[net,tr]=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},以便下次可以直接调用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

2

查看全部评分

发表于 2010-7-1 14:23:50 | 显示全部楼层 来自 黑龙江哈尔滨
Simdroid开发平台
举例子最好将来龙去脉交带清楚。比如就本例而论,需要拟合的模型、拟合后的模型,以及最后的结果(最好有图),即lz提到的“来看看其能力到底如何“,都写一下就最好了,这样的加分也会多一些。
回复 1 不支持 0

使用道具 举报

 楼主| 发表于 2010-7-6 01:45:30 | 显示全部楼层 来自 湖北随州
谢谢版主意见!
回复 不支持

使用道具 举报

发表于 2010-7-19 22:11:23 | 显示全部楼层 来自 安徽马鞍山
本帖最后由 lengyunfeng 于 2010-7-20 07:41 编辑

请问我的数据X=[12000.0 10000.0 8000.00 6000.00 5000.00 4000.00 3000.00 2500.00 2000.00 1500.00 1200.00 1000.00 800.000]
Y=[0.00303 0.00310 0.00317 0.00325 0.00330 0.00333 0.00326  0.00301 0.00312 0.00371 0.00435 0.00496 0.00581]  怎么按你的方法进行拟合,得到你的效果行不?
回复 不支持

使用道具 举报

 楼主| 发表于 2010-8-4 10:25:28 | 显示全部楼层 来自 湖北武汉
本帖最后由 hbgskick 于 2010-8-4 10:29 编辑

对于你这组数据需要先归一化,如下:
clc
clear
X=[12000.0 10000.0 8000.00 6000.00 5000.00 4000.00 3000.00 2500.00 2000.00 1500.00 1200.00 1000.00 800.000];%输入
Y=[0.00303 0.00310 0.00317 0.00325 0.00330 0.00333 0.00326  0.00301 0.00312 0.00371 0.00435 0.00496 0.00581];%输出
[Pn,minp,maxp,Tn,mint,maxt]=premnmx(X,Y);%归一化
p=Pn;
t=Tn;
net=newff(minmax(p),[150,15,1],{'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}=[0.3603 -0.1654 -0.1746 -0.0214 0.2173];
%net.b{1,1}=[-7.0574 3.4264 0.0017 -3.4974 6.9461]';
%net.b{2,1}=[0.2160]

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

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-8-6 09:36:51 | 显示全部楼层 来自 湖南长沙
请教一下楼主 学习速率在什么范围之内比较合适?
回复 不支持

使用道具 举报

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

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-8-23 19:21:59 | 显示全部楼层 来自 湖南长沙
我一直有一个疑问,就是神经网络对曲线进行拟合后能不能得到曲线的近似表达式呢?如果不能的话,这种拟合有什么意义呢?
回复 不支持

使用道具 举报

发表于 2010-8-24 08:30:35 | 显示全部楼层 来自 浙江宁波
是啊,我也有这样的疑问,这样拟合出来,有什么用呢?

麻烦lz给解释一下,谢谢了
回复 不支持

使用道具 举报

发表于 2010-8-31 06:30:03 | 显示全部楼层 来自 美国
可以的
权值和阀值、转换函数,就确定了一个解析的表达式。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-3-26 13:05:03 | 显示全部楼层 来自 上海松江区
拟合之后如何显示曲线的函数表达啊 具体是什么语句?
回复 不支持

使用道具 举报

发表于 2011-3-26 13:09:43 | 显示全部楼层 来自 陕西西安
5# hbgskick


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

使用道具 举报

发表于 2011-3-26 18:23:16 | 显示全部楼层 来自 天津
这个例子是 丛爽老师书上的, 希望楼主以后给予引用出处!
回复 不支持

使用道具 举报

发表于 2011-3-28 11:47:11 | 显示全部楼层 来自 上海松江区
可以的
权值和阀值、转换函数,就确定了一个解析的表达式。
subway96 发表于 2010-8-31 06:30
请问具体用什么语句能把拟合的曲线表达成函数关系式?谢谢
回复 不支持

使用道具 举报

发表于 2011-4-16 20:42:30 | 显示全部楼层 来自 山东济南
14# cat0924 我也非常想知道,到底用什么样的语句可以输出这个函数!求大仙指教!!感激不尽!
回复 不支持

使用道具 举报

发表于 2012-3-20 22:18:41 | 显示全部楼层 来自 江苏南京
这这就是画图嘛~
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 13:23 , Processed in 0.081373 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表