museum 发表于 2007-7-11 16:53

大伙看看我这个用matlab编的BP网络,咋差距就这么大?

这是用matlab编写的

clear
fid=fopen('d:\ann\p0.txt','r');
P=fscanf(fid,'%g',); %P为训练样本输入矢量
fid=fopen('d:\ann\t0.txt','r');
T=fscanf(fid,'%g',); %T为训练样本目标矢量
fid=fopen('d:\ann\p1.txt','r');
PP=fscanf(fid,'%g',); %PP为检验样本输入矢量
fid=fopen('d:\ann\t1.txt','r');
TT=fscanf(fid,'%g',); %TT为检验样本目标矢量
net=newff(minmax(P),,{'tansig','purelin'},'trainlm');
net=init(net);
net.trainParam.epochs=50000; %设置网络训练次数为50000次
net.trainParam.show=50; %设置每隔50次显示当前网络训练误差
net.trainParam.goal=0.01; %设置网络训练目标误差为0.01
=train(net,P,T); %利用函数train()对网络进行训练
A=sim(net,P); %利用函数sim()对训练年份和检验年份进行仿真
AA=sim(net,PP);
T1=1:1:20;
plot(T1,T,T1,A);
T2=1:1:4;
plot(T2,TT,T2,AA);

lxq 发表于 2007-7-11 16:58

楼主到底想表达什么东西?

museum 发表于 2007-7-11 17:00

分别为:1.我用到的数据

museum 发表于 2007-7-11 17:01

那位文献的作者运行的结果,极其理想,而我模拟的极不好

museum 发表于 2007-7-11 17:02

由于那个文献容量过大,我无法上传全部,只能截取最终结果的一页

该文献具体为:“陈集中。应用人工神经网络BP模型预测乌江流域年平均含沙量。2005,25(4):6-9”

lxq 发表于 2007-7-11 17:04

参数设置也很重要的
尤其对于不同的数据
论坛上不少关于BP网络的讨论
先搜索一下吧!

museum 发表于 2007-7-11 22:24

搜索了,也自己试着修改了,可惜效果还是不行,还望给予指点!

dingd 发表于 2007-7-12 09:01

对于训练样本,可以很容易达到均方差(RMSE)为1e-10,效果非常好啊!验证的结果就要差远了。

lxq 发表于 2007-7-12 11:35

clear
P=load('p0.txt');
T=load('t0.txt');
PP=load('p1.txt')
TT=load('t1.txt');
=premnmx(P,T);
net=newff(minmax(Pn),,{'tansig','purelin'},'trainlm');
net=init(net);
net.trainParam.epochs=50000; %设置网络训练次数为50000次
net.trainParam.show=50; %设置每隔50次显示当前网络训练误差
net.trainParam.goal=0.0001; %设置网络训练目标误差为0.01
=train(net,Pn,Tn); %利用函数train()对网络进行训练
y=sim(net,Pn); %利用函数sim()对训练年份和检验年份进行仿真
Y=postmnmx(y,min(T),max(T)) %%反归一化
AA=sim(net,PP);
T1=1:1:20;
figure;
plot(T1,T,'b',T1,Y,'r');

我觉得主要原因有:
1: 数据读入不太准确;
2:没有进行归一化处理;
3:初始训练数据较少;
另外一个你再加上去就可以了。

museum 发表于 2007-7-12 22:55

原帖由 lxq 于 2007-7-12 11:35 发表 http://chinavib.com/forum/images/common/back.gif
clear
P=load('p0.txt');
T=load('t0.txt');
PP=load('p1.txt')
TT=load('t1.txt');
=premnmx(P,T);
net=newff(minmax(Pn),,{'tansig','purelin'},'trainlm');
net=ini ...


天啊,lxq的代码和我那最主要的区别就是多了一个归一化和反归一化,怎么最终效果就差这么多

开心!

museum 发表于 2007-7-12 23:13

可是,为什么训练的20年里,预测的效果是那样好,而预测的4年里,效果那么差呢?

museum 发表于 2007-7-13 22:58

对20年内的训练效果很好,可是对接下来的4年的预测去怎么差的那么远?

museum 发表于 2007-7-13 23:01

另外,我觉的是不是训练样本太少,我自己又找了另一组数据,训练40年之后,再对10年进行预测,还是出现同样的现像,前40年训练极好,可是后10年预测差的太多太多,是不是我这个程序还有问题?


*********************************************88

clear
P=load('p0.txt');
T=load('t0.txt');
PP=load('p1.txt')
TT=load('t1.txt');
=premnmx(P,T);
net=newff(minmax(Pn),,{'tansig','purelin'},'trainlm');
net=init(net);
net.trainParam.epochs=50000; %设置网络训练次数为50000次
net.trainParam.show=50; %设置每隔50次显示当前网络训练误差
net.trainParam.goal=0.0001; %设置网络训练目标误差为0.01
=train(net,Pn,Tn); %利用函数train()对网络进行训练
y=sim(net,Pn); %利用函数sim()对训练年份和检验年份进行仿真
Y=postmnmx(y,min(T),max(T)) %%反归一化
AA=sim(net,PP);
T1=1:1:20;
figure;
plot(T1,T,'b',T1,Y,'r');

figure;

T2=1:1:4;
plot(T2,TT,'b',T2,AA,'r');

ak47998 发表于 2008-1-7 09:22

还努力学习中,感谢楼主!:victory:
页: [1]
查看完整版本: 大伙看看我这个用matlab编的BP网络,咋差距就这么大?