声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1412|回复: 4

[编程技巧] 为什么这两个程序预测结果相差这么大啊

[复制链接]
发表于 2006-7-23 14:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
大家好。能不能帮我看看下面的程序(神经网络方面的 ),误差大的很啊,泛化能力差,而且训练过程中老是出现obsolete的警告。
m_data=[
28.2 33.6 16.4 31.42 84.73 46.1 0.15 25 50 60 ;
28.2 44 15.4 30.24 85.06 46.1 0.15 30 50 60 ;
27.6 85 15.4 17.99 85.4 48.78 0.1 25 40 60 ;
27.6 85.8 14.4 17.69 85.76 48.78 0.15 25 40 60 ;
27.6 100 20 13.4 85.52 48.78 0.15 30 40 60 ;
28.2 30.2 11.6 44.28 84.87 46.1 0.1 25 50 45 ;
28.2 33 12.6 40 84.88 46.1 0.15 25 50 45 ;
28.2 47.2 11.7 30.62 85.01 46.1 0.06 30 50 45 ;
28.2 40.2 12 34.49 85.52 46.1 0.10 30 50 45 ;
28.2 45.4 13.4 31.65 85.2 46.1 0.15 30 50 45 ;
27.6 50 11.8 31.04 84.62 48.78 0.07 25 40 45 ;
27.6 43 12 33.7 85.11 48.78 0.15 25 40 45 ;
27.6 100 19.8 10.89 84.36 48.78 0.1 30 40 45 ;
27.6 100 19.6 10.94 85.94 48.78 0.15 30 40 45 ;
28.2 35.2 12.4 38.55 85.29 46.8 0.07 28 50 40 ;
28.2 31.6 12 41.53 85.62 46.8 0.1 28 50 40 ;
28.2 35.6 14.6 37.54 85.43 46.8 0.12 28 50 40 ;
];

p1=m_data(:,1:5);
t1=m_data(:,6:10);
p=p1';t=t1';
[pn,meanp,stdp,tn,meant,stdt]=prestd(p,t) %预处理
[w1,b1,w2,b2]=initff(pn,13,'tansig',tn,'purelin')
df=10;
me=1000;eg=0.01;
lr=0.1;
tp=[df me eg lr];
[w1,b1,w2,b2,eg,tr]=trainlm(w1,b1,'tansig',w2,b2,'purelin',p,t,tp)
a1=simuff(p,w1,b1,'tansig',w2,b2,'purelin')
c=a1-t

n_data=[
35.4 61.2 23.2 28.54 75.44 45.52 0.1 22 40 20 ;
62 99 36 8.26 70.83 19.17 0.1 14 40 20 ;
61 96 39.2 10.75 74.71 25.74 0.15 16 40 20 ;
27.6 100 23.2 12.86 83.25 48.78 0.1 30 40 60 ;
75.2 80 64 6.5 63.48 21.5 0.12 28 40 15 ;
27.6 47 13 32.69 85.06 48.78 0.1 25 40 45 ;
75.2 70 62 6.94 55.02 21.5 0.08 30 40 10 ;
28.2 42.8 10.6 35.6 85.51 46.8 0.07 28 40 40 ;
75.2 80 54.2 10.33 69.95 21.5 0.08 20 40 15 ;
36.4 88.8 15 18.72 85.32 42.03 0.1 22 40 20 ;
56 80.7 30 27.16 80.78 42.32 0.08 20 40 20 ];
p2=n_data(:,1:5);
p2=p2';
t2=simuff(p2,w1,b1,'tansig',w2,b2,'purelin')
t2n=n_data(:,6:10);
t2m=t2n';
c=t2-t2m

但是程序按下面写法误差小一些,能否将上述程序修改一下达到下面程序的精度呢?为什么差这么远呢?谢谢啦。
m_data=[
28.2 33.6 16.4 31.42 84.73 46.1 0.15 25 50 60 ;
28.2 44 15.4 30.24 85.06 46.1 0.15 30 50 60 ;
27.6 85 15.4 17.99 85.4 48.78 0.1 25 40 60 ;
27.6 85.8 14.4 17.69 85.76 48.78 0.15 25 40 60 ;
27.6 100 20 13.4 85.52 48.78 0.15 30 40 60 ;
28.2 30.2 11.6 44.28 84.87 46.1 0.1 25 50 45 ;
28.2 33 12.6 40 84.88 46.1 0.15 25 50 45 ;
28.2 47.2 11.7 30.62 85.01 46.1 0.06 30 50 45 ;
28.2 40.2 12 34.49 85.52 46.1 0.10 30 50 45 ;
28.2 45.4 13.4 31.65 85.2 46.1 0.15 30 50 45 ;
27.6 50 11.8 31.04 84.62 48.78 0.07 25 40 45 ;
27.6 43 12 33.7 85.11 48.78 0.15 25 40 45 ;
27.6 100 19.8 10.89 84.36 48.78 0.1 30 40 45 ;
27.6 100 19.6 10.94 85.94 48.78 0.15 30 40 45 ;
28.2 35.2 12.4 38.55 85.29 46.8 0.07 28 50 40 ;
28.2 31.6 12 41.53 85.62 46.8 0.1 28 50 40 ;
28.2 35.6 14.6 37.54 85.43 46.8 0.12 28 50 40 ;
];
p1=m_data(:,1:5);
t1=m_data(:,6:10);
p=p1';t=t1';
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t)
n=13;
net=newff(minmax(pn),[n,5],{'tansig','purelin'},'traingdm');

% 训练网络
net.trainParam.show=50;
net.trainParam.lr=0.3;
net.trainParam.mc=0.9;
net.trainParam.epochs=5000;
net=init(net);
net.trainParam.goal=0.1;

%调用TRAINGDM算法训练BP网络
net=train(net,pn,tn);
inputWeights=net.IW{1,1}
inputbias=net.b{1}
layerWeights=net.LW{2,1}
layerbias=net.b{2}

%对BP网络进行仿真
A=sim(net,pn);
E=A-tn;
M=sse(E)
N=mse(E)
B_data=postmnmx(A,mint,maxt)
error=B_data-t

%验证数据
n_data=[
35.4 61.2 23.2 28.54 75.44 45.52 0.1 22 40 20 150;
62 99 36 8.26 70.83 19.17 0.1 14 40 20 150;
61 96 39.2 10.75 74.71 25.74 0.15 16 40 20 150;
27.6 100 23.2 12.86 83.25 48.78 0.1 30 40 60 150;
75.2 80 64 6.5 63.48 21.5 0.12 28 40 15 150;
27.6 47 13 32.69 85.06 48.78 0.1 25 40 45 150;
75.2 70 62 6.94 55.02 21.5 0.08 30 40 10 150;
28.2 42.8 10.6 35.6 85.51 46.8 0.07 28 40 40 150;
75.2 80 54.2 10.33 69.95 21.5 0.08 20 40 15 150;
36.4 88.8 15 18.72 85.32 42.03 0.1 22 40 20 150;
56 80.7 30 27.16 80.78 42.32 0.08 20 40 20 150];
p2=n_data(:,1:5);
p2=p2';
p2n=tramnmx(p2,minp,maxp);
a2n=sim(net,p2n);
a2=postmnmx(a2n,mint,maxt);
a2=a2
b2=n_data(:,6:10);
b2=b2'
c2=a2-b2
回复
分享到:

使用道具 举报

发表于 2006-7-24 11:15 | 显示全部楼层
一般人看完,会说你的训练步数,误差目标等要求不一样,所以会出现训练误差不同的情况,在我看来,这只是一部分,你写的程序显然费话太多,而想表现的意思又很简单,难怪系统提示说你obsolete呢!~即使在很多问题中都会被要求做数据的归一话,是为了避免不同因子之间量级差异过大,而且解决训练收敛的的问题,所以个人觉得有必要做归一化.你后面的那个号称误差小的程序更是obsolete,别人看的不是很明白.当然如果为版权问题故意写成那样,不想让人看懂也是可以原谅的!~

评分

1

查看全部评分

 楼主| 发表于 2006-7-26 12:04 | 显示全部楼层
哈哈,看来是遇到高人了,既然帮我找到了症结,就痛痛快快的帮我把毛病一个个挑出来啊,好让我看个透彻.
发表于 2006-7-28 18:34 | 显示全部楼层
一个一个?时间不允许,请谅解,本人忙于课题,只有少量时间上来看看,实在不好意思
发表于 2006-8-10 16:43 | 显示全部楼层
除了归一化问题和精度要求不同外,其他的是一样的事情吧,只是版本不一样,用的语句不同吧。

另外你就直接用下面那个程序的就行了,还有预先把数理处理好,不要截来截去的啊。

[ 本帖最后由 mjhzhjg 于 2007-4-13 01:11 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-10-4 07:20 , Processed in 0.062676 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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