老饼讲解-神经网络
BP神经网络
工具箱使用说明
matlab神经网络工具箱BP易踩的坑
作者 : 老饼 日期 : 2022-06-09 05:23:23 更新 : 2022-06-29 01:30:58
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com



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


01. 将数据归一化

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


02. 预留测试数据却没关掉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、使用traingd,traingda等训练方法

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



04、提取权重阈值WB没有归一化

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








 End 





联系小饼