神经网络-专题教程

【提示】matlab-BP神经网络工具箱-易踩的坑

作者 : 老饼 发表日期 : 2022-06-09 05:23:23 更新日期 : 2024-11-12 15:43:06
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



本文收集和展示一些使用matlab神经网络工具箱训练BP神经网络时易踩的坑





       01.matlab-BP神经网络工具箱-易踩的坑       




本节展示一个在使用matlab的BP神经网络时踩的一些坑,作为参考




      BP神经网络工具箱-易踩的坑     


BP误区一:使用工具箱训练BP时将数据归一化                                               
由于matlab在2012b版本之前并不会自动将数据归一化                                                
因此,在2013之前的教材,都会将数据自行归一化,再投到网络中,这是个繁琐的过程
而很多初学者并不知道,只是照抄代码,因此,每次都进行繁琐的归一化反归一化操作  
而事实上,现在的版本完全不需要自己进行归一化,工具箱已经会自动做归一化处理了  
现在的版本归一化和不归一化的结果差异不会太大                                                        
注意,是差异不会太大,归一化在某些场景终究还是比不归一化要好的                          

BP误区二:预留测试数据却没关掉test占比                                                 
 
仍然是版本变迁,使用了老式教材代码造成的坑                                                             
老版本matlab不支持分割数据                                                                                     
在老教材,一般会在建模前,先预留测试数据,训练完后再把测试数据进行效果检验     
而现在的版本都默认自动开启数据分割                                                                        
  如果自行预留了预测数据,一定要把网络数据分割的test占比关掉                                   
 事实上这是个很大的坑                                                          
如果没关掉test占比,工具箱在建模时会再划分15%的数据作为预测数据              
这15%的数据不参与任何过程,这样相当于浪费了这15%的数据 
                                     
如果自己独自抽出测试数据,记得要把数据分割test占比分配到训练中,如下:            
 net.divideParam.trainRatio = 0.85 ;     % 默认0.7          
net.divideParam.valRatio    = 0.15;      % 默认0.15       
net.divideParam.testRatio   = 0;          % 默认0.15       

BP误区三:使用traingd,traingda等训练方法                                               
 
matlab工具箱提供了非常多的训练方法,刚开始时,总喜欢在不同的方法上试                
 实际上matlab推荐的只有2或3种训练方法,具体如下:                              
一、小数据,内存足时,绝对推荐trainlm.效果几乎是无法质疑了                                 
二、大数据,trainlm跑不动时,此时推荐trainscg或trainrp                                         
 这2或3种训练方法几乎成了定式,在其它方法上试,很多时候是徒劳的                         
 当然,也有可能有更好的效果,但很难跑出比trainlm,trainscg,trainrp更好的效果     

 BP误区四:提取权重阈值WB没有反归一化                                                    
 
net.iw,net.lw,net.b 中记录了输入层权重,网络层权重,和阈值,这是毫无疑问的           
但代入公式后,却发现和网络sim得到的结果不一致,一直摸索了很久                           
最后发现原因是,自matlab2012b之后,网络默认会自动归一化(也可自行关掉)        
  这样提出来的w,b,是自动归一化后的数据训练的网络对应的权重阈值,                          
使用前需要自行将数据归一化,并将结果反归一化,才能与sim对得上                           






好了,以上就是笔者收集到的使用BP神经网络工具箱时踩的坑了~








 End 





联系老饼