神经⽹络的训练(问题集锦)
问:rbf神经⽹络的训练样本要多⼤?
答:因课题⽽异。
1、样本最关键在于正确性和准确性。你所选择的样本⾸先要能正确反映该系统过程的内在规律。我们从⽣产现场采得的样本数据中有不少可能是坏样本,例如由于测量仪器故障导致测量数据误差较⼤等,这样的样本会⼲扰你的神经⽹络训练。通常我们认为坏样本只是个别现象,所以我们希望通过尽可能⼤的样本规模来抵抗坏样本造成的负⾯影响。
2、其次是样本数据分布的均衡性。你所选择的样本最好能涉及到该系统过程可能发⽣的各种情况。例如某化⼯⽣产中某反应炉的温度主要分布在350度—400度,且出现在380度的情况较多,那么你的样本数据最好也是在350-400度各种情况都有,并且也是在380度左右的样本较多些,这样可以极⼤可能的照顾到系统在各个情况下的规律特征。通常我们对系统的内在规律不是很了解,所以我们希望通过尽可能⼤的样本规模来“地毯式”覆盖对象系统的⽅⽅⾯⾯。
3、再次就是样本数据的规模,也就是你要问的问题。在确保样本数据质量和分布均衡的情况下,样本数据的规模决定你神经⽹络训练结果的精度。样本数据量越⼤,精度越⾼。还⽤刚才的例⼦,假如反应炉的
温度主要均匀分布在375-385度之间,那么你⽤100个均衡分布在375-385度的训练样本去训练,经过⽆限次或者说是⾜够多次迭代之后,理论上你的神经⽹络的精度就是0.1度。如果你觉得0.1度⾜够细腻了,那么样本规模为100也就可以接受了。由于样本规模直接影响计算机的运算时间,所以在精度符合要求的情况下,我们不需要过多的样本数据,否则我们要等待很久的训练时间。
补充说明⼀下,不论是径向基(rbf)神经⽹络还是经典的bp神经⽹络,都只是具体的训练⽅法,对于⾜够多次的迭代,训练结果的准确度是趋于⼀致的,⽅法只影响计算的收敛速度(运算时间),和样本规模没有直接关系。
问:BP神经⽹络如何确定神经元个数?
答:现在还没有什么成熟的定理能确定各层神经元的神经元个数和含有⼏层⽹络,⼤多数还是靠经验,不过3层⽹络可以逼近任意⼀个⾮线性⽹络,神经元个数越多逼近的效果越好。
你有100个样本,90%⽤来做训练,10%⽤来做验证等,当然,有时候还得留下10%做测试⽤。
问:⼤家的Matlab神经⽹络输⼊端⼀般都多少维啊?
答:输⼊段维数是根据输⼊数据定的,输⼊数据太多的话可以考虑对数据降维处理。
问:⼤家训练⽹络时单次时间最长时间是多少?
1)我建了⼀个bp⽹,花了2个多⼩时训练⼀次,看着电脑发呆,觉得很有趣。
2)你这还算是幸运的,我花了⼀晚上的时间都没有收敛。有的可能需要更长的时间!
3)看⽹络的复杂程度,7-70-45-2结构的⽹络⽤resilient规则训练需要30分钟左右,设置误差为0.01
4)这可能还和机器的硬件性能有关系.实际上很多的⽹络训练都说⽤cpu时间来衡量,实际上是个误区,就是⼀个程序,你⽤同⼀台机⼦,如果⼀次你只运⾏本程序,⼀次你还看着⽹页,聊着qq,时间肯定不⼀样,更不⽤说你⽤不同的机⼦了。
5)我试过⽤遗传算法来优化权重,时间更加长
问:Matlab中各种神经⽹络都应该⽤在什么地⽅呢?
答: 1)严格来讲,每种神经⽹络都有⾃⼰的特点,相对应的也有⾃⼰的缺点。rbf在收敛速度⽅⾯要⽐BP有所改善,以及在局部极⼩问题上也有改进。如果单纯地讲,孰优孰劣,不⼤客观。因为不管是那种⽹络,都有⼀些参数需要设置,如果设置不合适的话,效果就会很差。
2)按照神经⽹络各种算法的原理来说,BP⽹络主要是针对全军进⾏拟合,⽽RBF神经⽹络则是对局部拟合的效果⽐较好,其原因在于内部函数的不同,如果要仔细研究的话建议看看系统的书籍。另外具体的使⽤范围也不是简单就能划分的,主要还是通过不段的仿真进⾏⽐较
问:Matlab关于bp⽹nntool参数调节问题求助
我⽤nntool,⾥⾯有⼀些参数需要设置,⼏个最常⽤的我了解是怎么回事,但是有⼏个我不是很理解,向⼤家请教⼀下:nntraintool界⾯上,以trainrp为例
1.validation checks 这个是上⼀个界⾯network:network1⾥⾯的max_fail最⼤失败次数?是不是就是⽤校验的那部分数据来衡
量这个的?是不是⼀但这个数满了,再训练下去就是过拟合了,就没有训练的必要了?这个次数也是可以设置的,默认是6,要是增⼤这个数值的话,对⽹络来说是哪⽅⾯的影响呢?
2.delt_inc delt_dec 这2个是这个训练算法源代码中的某个变量吧,它们默认值是1.2,0.5,这两个参数调整的话,增⼤或者减⼩对⽹络有哪⽅⾯影响呢?我⾃⼰也调了⼏组,但是因为我的数据量庞⼤,所以感觉不是很明显。
3.delta0 deltamax这两个应该也是某个变量,是什么含义啊?
有个⽐较重要的问题是,我之前⽤的是7.1版本,那⾥⾯的nntool似乎并没分校验数据,测试数据这样的,我训练⽹络的时候也并没有因为validation checks 满了⽽停⽌训练的,所以让我很费解
还有就是plots⾥⾯的training state 和regression画的图是什么意义啊?我⾃⼰有个理解,但是也不知道对不对,user's guide 也看过了,⼤⽅向上是懂了,但是⼩细节的地⽅还是不是很清楚。
我现在做的东西相当于⾮线性函数拟合,输⼊数据和输出数据数据量⼗分庞⼤,我师之前做了⼀些⼯作,但是结果并不是很理想,并未⽐传统的统计⽅法优越多少,这个显然是不应该的,理论上说,⼀个3层的BP⽹络可以以任意精度逼近⼀个⾮线性函数,然后⼈家期刊的审稿的专家的说法就是⽹络性能并没有完全发掘出来,我⾃⼰想想觉得有过拟合现象存在了,因为她之前也⽤的是7.1版本,其实我只要⽬标误差在10^-1数量级就可以了,但是现在误差在6左右,这样我的⽹络输出和期望输出的均⽅根误差是1~6,不符合我的要求。我试着调了隐节点数,2层的传递函数组合,训练函数。还是打不到我要的效果。归⼀化吧,感觉意义不是很⼤,因为归⼀的时候⽬标误差下降了2个数量级,但是反归⼀化后,输出和期望输出的均⽅根误差还是1~6,也就是说归⼀化对我的样本意义不是很⼤。另外我的输⼊时已经经过主成分分析过的,取的主成分可以代表99.9988%的信息量,所以增加维数好像也没什么⽤。唉~~!我⾃⼰现在瞎忙活⼏天了,还没什么进展......
有过相关经验的进来稍微讨论⼀下下也⾏啊,没准你说的某句话对我就有⼤启发了~~期待ing
答:1.对于较新的matlab版本(本⼈⽤matlab r2008b和r2009b)做神经⽹络问题时,
不管你⽤什么训练函数做函数逼近问题,⼀般都会将你的输⼊输出对样本分为3部分,⼀部分⽤来做⽹
络的训练
另外⼀部分作为确认样本,还有⼀部分时测试样本。
⼀般是按照⼀定的⽐例随即分组的,我知道我⽤的matlab版本中会将输⼊样本的60%作为⽹络输⼊训练使⽤
20%作为确认样本,另外20%作为测试样本,当然这3个⽐例是可以⾃⼰设定的,(具体设定⽅法和定义⽹络⽬标误差差不多,这⾥我记不清属性参数了)
2.⾄于这3部分样本的作⽤这⾥有必要在解释下
第⼀部分做⽹络输⼊训练⽤这⾥不多解释了;⾄于确认样本,它就和validation checks 有关系了,我们知道在第⼀部分⽹络样本在对⽹络的训练过程中,⽹络的输出会逐步逼近⽬标输出,从⽽减⼩⽬标误差,但是在这⼀训练过程中,每训练⼀次都会利⽤确认样本来检验⽹络对确认样本的拟合能⼒,即⽹络在确认样本的输⼊下其输出误差(⼀般是均⽅差量度)是否也呈现下降的趋势,如果连续V次确认样本的输出误差都不在减⼩(甚⾄增⼤)那么训练就会终⽌。这⾥的V就是validation checks。第三部分的测试样本在⽹络训练的过程中是不发挥作⽤的,主要是看看⽹络最终训练成功后,测试样本的误差曲线如何。
可想⽽知,⼀个良好的⽹络,其训练样本的误差曲线,确认样本的误差曲线以及测试样本的误差曲线应该是呈现很好相关性的,曲线的⾛势都应该是慢慢下降的,并且还要能达到⼀个合适的⽬标误差。说道⽹络的⽬标误差我想提的是,⽬标误差合适就好,过⼩或过⼤都不好,这⾥不多说。
3.对于楼主所提的要求我看⼀般就是选⽤BP⽹络了,⾄于BP⽹络的规模,我想应该是要与样本的规模想适配就好
如果输⼊输出向量的长度都不⼤的话,选⽤5~15个神经元且是单隐层就就够了,过多的神经元会出现过度拟合,降低泛化能⼒,过少则拟合不⾜。当然了多次改变神经元个数,以及⽬标误差,多次试验是很重要的了,具体还是查查有关资料吧,这⾥不多说了。
4.我⼀般去评判⽹络的拟合能⼒都喜欢⽤相对误差来看结果。。。⾄于楼主说的归⼀化什么的,我想说的是,不管是什么数据,输⼊到⽹络函数,函数都会先⾃动对数据归⼀化的,这是⽹络训练函数例如newff的内部函数,不需要⽤户调⽤。。。。
5.每⼀个⽹络函数⽐如newff都需要有⼀个训练函数,常⽤的是trainlm,该函数收敛速度快,当然了,神经⽹络⾃带的训练函数还是很多的,每⼀个函数都有⾃⼰内部的算法,以及相关参数,这些就需要楼主搜阅相关资料了。
当你⽤nntool来实现⽹络时,训练函数的有关参数就可以本⽤户修改。。
6.如果可以的话楼主尝试⽤M⽂件来编写神经⽹络的代码吧,好点。。
7.plots⾥⾯的training state 和regression画的图是什么意义啊?这点,我想说我对training state 不怎么熟悉,但是regression图主要是反应相关系数,即⽹络的拟合能⼒。你可以类⽐的理解为线性拟合中的R,其实2者是⼀个意思的
8.说了这么多,有说错的地⽅请各位包涵,不过好⽍加点分和矩阵M币吧。。。⾟苦啊!~
问:求助:有⼈懂validation check吗
我在训练BP⽹络时,nntraintool 的界⾯上提⽰说validation stop.⽽且它的validation check⾃动显⽰的是6,⽽训练⽬标没有达到,训练就结束了。求助各位⼤侠。
答:validation check
翻译过来:确认检查
内涵:神经⽹络的样本若输⼊⽹络,默认情况下会将样本随即分为3类:训练样本,确认样本和测试样本。具体说明⽐较多,参考www.ilovematlab/viewth ... 09&page=1#pid588855
确认检查值默认是6,它的意思是指随着⽹络利⽤训练样本进⾏训练的过程中,确认样本的误差曲线连续6次迭代不在下降。这时训练终⽌(这只是训练终⽌条件之⼀,满⾜任⼀终⽌条件,训练过程都将终⽌)
深层含义你可以这样理解,如果随着⽹络的训练,确认样本的误差已经基本不在减⼩,甚⾄增⼤,那么就没有必要再去训练⽹络了,因为继续训练下去的话,在利⽤测试样本进⾏测试⽹络的话,测试样本的误差将同样不会有所改善,甚⾄会出现过度拟合的现象
问:Matlab的神经⽹络训练完了,怎么测试的时候误差这么⼤啊!
程序已经训练完了,可是测试的时候误差怎么这么⼤啊?有没有什么解决⽅案啊?
答:测试时出现误差增⼤是正常的,如果特别的⼤,超过了预期很多,可能有如下的原因:
1、你的数据特征值提取的不好,我不知道你的原始数据是从哪⾥得到的,你是要分类还是预测,如果能描述清楚背景,就能更好地回答你。如果特征值不能反映你所需要的结果,就会出现误差很⼤的情况。举个例⼦,你想依靠⼈的体重来区分⼈好⼈与坏⼈,这个特征值就不能很好地代表样本。
2、训练数据量太⼩,训练太多,对训练数据过拟合了。
3、数据缺乏规范化。
补充:我要做的是预测问题,是想依据过热器进出⼝焓差得到焓差灰污系数,⽽我的输⼊是七个变量,分别是主蒸汽流量、炉温、排烟温度、烟⽓含氧量、1级过热器进⼝烟温、2级过热器进⼝烟温、主蒸汽压⼒,得到的输出是过热器进出⼝焓差。误差要求5%以内,预测⼀直不理想!
我还有⼏个问题:
1、你指的特征值是不是就是我的输⼊变量,可是我觉得如果是进⾏分类的话这个影响应该就⽐较⼤,这⾥应该不会吧,不知道我这呀理解对不对。
2、是不是指我的训练数据太少,可是我就得到了这么多的数据,训练太多指的是训练次数吗?过拟合是什么意思?
3、规范化指的是什么意思啊?
因为我不是这个专业的,以前没接触过这⽅⾯的知识,所以有很多都不懂希望⾼⼿能详细解释下,谢谢了!
我所说的特征值取的不好是指,你的这七个输⼊变量是否是综合影响了你所说的焓差灰污系数,是否有其他你没考虑到的因素也影响焓差灰污系数,这需要相应的背景知识,这七个变量是否有些对结果影响很⼤,有些对结果的影响⾮常⼩,当然这也需要背景知识来决定,你可以去掉哪些影响⼩的因素再试验。
训练数据越多越好,测试数据也是,不然很难到其中的规律,因为偶然性的作⽤就会很⼩了,怎么都要各有⼆三⼗个吧。规范化就是把不同的原始数据规范到⼀个范围内,举个例⼦,输⼊变量中蒸汽流量是从1-1000,温度是20-30,这样蒸汽流量的变化就对神经⽹络结果的影响很⼤,温度的影响就很⼩。如果其实际影响⼒是⼀样的,或说不准,就需要将其规范到⼀定的范围内,常见的⽅法有 1、都规范到0-1的范围内,2、取⾃然对数等等。
问:Matlab中各种BP神经⽹络训练函数的特点及适⽤范围??
BP神经⽹络的训练函数有许多,如:traingd traindm trainrp trainlm trainbr等...不知这些函数都有什么特点,他们之间有
神经网络中正则化是为了干什么什么区别,分别适⽤于何种情况.
答:1. traingd:批梯度下降训练函数,沿⽹络性能参数的负梯度⽅向调整⽹络的权值和阈值.
2. traingdm:动量批梯度下降函数,也是⼀种批处理的前馈神经⽹络训练⽅法,不但具有更快的收敛速度,⽽且引⼊了⼀个
动量项,有效避免了局部最⼩问题在⽹络训练中出现.
3. trainrp:有弹回的BP算法,⽤于消除梯度模值对⽹络训练带来的影响,提⾼训练的速度.(主要通过delt_inc和delt_dec来
实现权值的改变)
4. trainlm:Levenberg-Marquardt算法,对于中等规模的BP神经⽹络有最快的收敛速度,是系统默认的算法.由于其避免了
直接计算赫赛矩阵,从⽽减少了训练中的计算量,但需要较⼤内存量.
5. traincgb:Plwell-Beale算法:通过判断前后梯度的正交性来决定权值和阈值的调整⽅向是否回到负梯度⽅向上来.
6. trainscg:⽐例共轭梯度算法:将模值信赖域算法与共轭梯度算法结合起来,减少⽤于调整⽅向时搜索⽹络的时间.
⼀般来说,traingd和traingdm是普通训练函数,⽽traingda,traingdx,traingd,trainrp,traincgf,traincgb,trainscg,trainbgf等等都
是快速训练函数.总体感觉就是训练时间的差别⽐较⼤,还带有精度的差异.
问:请教:Matlab 7.8 BP⽹络训练时validation checks 6 退出训练问题
Matlab 7.8 新建⽹络命令为
net = newff(P,T,[S(N-l)],{TFNl}, BTF,BLF,PF,IPF,OPF,DDF)
[tr][td]P:[/td][td] R x Q1 matrix of Q1 sample R-element input vectors
[/td][/tr][tr][td]T:[/td][td] SN x Q2 matrix of Q2 sample SN-element target vectors
最近做⼀个⽹络训练时,使⽤⽼版本命令:
net=newff( minmax(Input), [NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%创建四层BP
⽹络不会出现Validation Stop情况;
但是使⽤新命令:net=newff(Input,Target,[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx')后
每次训练10次左右就因为Validation Stop情况退出训练。
我的⽹络是3输⼊,1输出,2隐含层,Input 是3*60矩阵,Target是1*50矩阵。
答:1)有三种⽅法解决这个问题;
1 提⾼validation checks的数值,⽐如设置ainParam.max_fail = 200;其实这等于⾃⼰糊弄⾃⼰严重不推荐,出现停⽌训练,就是因为被训练的⽹络已经过拟合,停下来是应该的。但六的确有点⼩,建议改成10到20之间的数,此
参数可以修改,⽐如 ainParam.max_fail = 20;
2 修改被训练的⽹络,⽐如说再加⼀个隐藏层试试
3 如果是数据太相近的问题,试试选择⽤divideind
2) 就⽬前經驗來說增加trainParam.max_fail通常並不會繼續改善網路的結果,
因為已經經過了6個epochs的運算都沒有對validation data set的驗證結果產⽣改善
我嘗試改成10 12 20其結果都是⼀樣...
3) 加⼊如下参数,取消validation check功能 net.divideFcn = ''
但是这个⽅法对于⽹络的训练精度提⾼和输出的逼近程度没有显著改善
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论