老饼讲解-神经网络 机器学习 神经网络 深度学习
BP神经网络建模
1.BP神经网络-工具箱说明
2.BP神经网络-建模代码
3.BP神经网络-训练技巧
4.BP神经网络-应用案例
5.BP神经网络-问题答疑

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

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



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



       01. BP误区一:使用工具箱训练BP时将数据归一化      

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


  02. 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       




  03. BP误区三:使用traingd,traingda等训练方法   

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



  04. BP误区四:提取权重阈值WB没有反归一化   

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






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






 End 





联系老饼