本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
本文收集和展示一些使用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