声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4957|回复: 20

[综合讨论] BP网络每次的结果都不一样

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

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

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

x
我在用BP模型时,每次的结果都不一样,我已经把权值、阀值调成固定值了,可是结果还是每次都不一样。这是为什么呢?
  希望能帮我解决一下。
  非常感谢!

[ 本帖最后由 ericlin 于 2006-8-10 16:05 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-7-29 18:27 | 显示全部楼层
训练数据和测试数据是不是一样的。
发表于 2006-8-3 09:45 | 显示全部楼层
请问楼主:你是如何在bp中使用自己初始化的权重和阀值的?在开始初始化的时候,如何定义?谢谢~~!
发表于 2006-8-10 15:45 | 显示全部楼层
你的前提是什么,是每次训练时初始化的时候没有随机赋值,而是用了自己定义的权值和阈值?
 楼主| 发表于 2006-8-15 09:56 | 显示全部楼层

BP网络每次的结果都不一样

p=[-0.5 -0.5 0.3 0;-0.5  0.5 -0.5 1 ];
t=[2,3,-2,-3];
net=newff(minmax(p),[2,1],{'tangsig','purelin'},'trainlm');
net=init(net);
固定权值阀值
inputWeights=[];
inputbias=[];
layerWeights=[];
inputbias=[];
当前输入层权值阀值
inputWeights=net.IW{1,1};
inputbias=net.b{1};
网络层权值阀值
layerWeights=net.LW{2,1};
layerbias=net.b{2};



net=train(net,p,t);
y=sim(net,p)
即使是上面简单的程序,每次计算结果都不一样!我想让每次运行的结果是一致的,所以我加上输入层、网络层的权值阀值,并把权值阀值固定。可是结构还是不一样。
发表于 2006-8-15 10:14 | 显示全部楼层
结果不一样是很正常,由于神经网络初始化是随机的
建议在训练的过程中记录下一些初始值,这样训练效果理想就可能重复得到相同的结果

评分

1

查看全部评分

 楼主| 发表于 2006-8-15 16:55 | 显示全部楼层
我不明白,需要记录哪些初始值
 楼主| 发表于 2006-8-15 17:06 | 显示全部楼层
在用bp模型进行预测时,误差会特别大!甚至出现的结果不能叫误差!

load p50.mat
load t50.mat

p=p50',
t=t50',

net=newff(minmax(p),[7,1],{'tansig','purelin'},'trainlm');
net=initlay(net);

给权值阀值赋值
inputWeights=[3.122779048171,2.255821869611891,3.799706272202788,-3.66328379887522,-0.545092237633623,3.850681563493402,-0.538975079106648,-0.718962003134425,10.03521227649018;-1.761375571152317,-0.366494400559514,3.435168067936286,-2.847417329424111,4.048425174977655,-5.166011915728258,-0.808441534152644,2.009610223607288,4.775194687923136;1.107981076557102,1.211046317885484,-1.170341820738418,-4.56860778268783,-0.504666633461631,3.08599919324985,-1.264138669177781,3.12492704492211,-7.455148571649823;-0.15386210628244,3.241862547606278,5.434479737455827,1.665920020629382,-1.277867959435772,-2.171602576084157,0.795321280377629,0.875055964684542,-10.49968887649099;2.753069487724973,3.002435347684374,-3.912241229692641,-2.343761064008628,3.486003720320172,3.832166731664813,-0.551788335179388,-0.020667647287911,-5.082847232930414;2.719543971255148,2.500544231721904,-1.92012347156305,-4.569796167767257,0.373491608559365,0.047912726851151,0.171939918021146,3.534398983839914,1.608614128681488;-0.310499859136641,-2.336053730703718,2.809395211360493,-5.05561448959479,-3.035195653935498,2.452668883245069,-0.990174303405127,1.954685186786508,7.369234137822707;-3.856961827394375,-0.764153619600216,-4.938094828722757,2.890682595198744,1.973300336924911,-0.935046743803598,0.630338068416335,0.989062647616526,-6.949538054496057;]
inputbias=[-9.854436918404796;3.570030805596352;-1.773581770780901;-4.557901632847051;-5.862101554924009;-6.635235020149124;2.115174813461072;4.275858630573478;]
layerWeights=[0.676992089876161,0.136144922015552,-0.259172886735767,0.405479826480754,0.093142303658212,-0.110239590654176,0.389134480851095,0.242620261590827;]
layerbias=[0.589642160401853;]


inputWeights=net.IW{1,1}
inputbias=net.b{1}
layerWeights=net.LW{2,1}
layerbias=net.b{2}



net.trainParam.epochs=2000;
net.trainParam.goal=0.1;
net.performFcn = 'msereg';
net.trainParam.show=100;



net=train(net,p,t);
a=sim(net,p);

E=t-a;
MSE=mse(E);
e=abs((t-a)./t);

figure(3)

[m,b,r]=postreg(a,t);

figure(4)
i=1:1:50;
plot(i,t,'+',i,a,'o','MarkerSize',3);

p_test=[1.255,1.264,1.297;0.207,0.223,0.205;0.72,0.74,0.98;0.429,0.44,0.357;0.161,0.081,0.148];
t_test=sim(net,p_test);
这是我的程序代码
我在预测时,调一组数据进行预测,数据不是50组中的,预测结果误差特大
为什么会出现这样的问题呢?
发表于 2006-8-15 17:08 | 显示全部楼层
每次初始化网络时都是随机的,因为newff()函数具有机性,所以训练终止时的误差也不完全相同,结果训练后的权植和阀也不完全相同(当然总体上来讲大致是一样的),因此每次训练后的结果也略有不同。

只有每次的结果不一样,才有可能找到比较理想的网络,找到之后用命令save filename net;保存网络就行了。调用时用命令load filename net;

评分

1

查看全部评分

 楼主| 发表于 2006-8-16 08:41 | 显示全部楼层
我在预测时,调一组数据进行预测,数据不是50组中的,预测结果误差特大
为什么会出现这样的问题呢?
我该如何处理呢?
发表于 2006-8-16 09:15 | 显示全部楼层
你是说训练后返回的权植和阀值相差特别大?
 楼主| 发表于 2006-8-16 09:56 | 显示全部楼层
我是说我用另外一组p值,预测t时,
误差特别大
 楼主| 发表于 2006-8-16 10:03 | 显示全部楼层
我得到理想的网络后,权值阀值已确定
如何得到p与t之间的关系式
发表于 2006-8-17 18:47 | 显示全部楼层
神经网络训练的过程中,由于BP算法的特性决定了其在训练时,收敛结果具有如下几个特性:

1. 对初值的敏感性,也就是改变初值时收敛结果可能发生变化;
2. 算法收敛收敛后,得到的结果不一定是全局最优

所以出现你所说的现象是正常的,是难以回避的,当然也有一些改进,但都只是对第2种情况的改善

评分

1

查看全部评分

发表于 2006-8-18 10:55 | 显示全部楼层
原帖由 caochongwen 于 2006-8-16 10:03 发表
我得到理想的网络后,权值阀值已确定
如何得到p与t之间的关系式


t=f(W*p+b)
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-25 05:27 , Processed in 0.060658 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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