赞
踩
转载请说明原文来自 老饼玩转-BP神经网络https://www.bbbdata.com/nn
目录
本文总结和积累,matlab神经网络工具箱BP易踩的坑。
很多人参照老教材,采用老式建模流程,自己抽出测试数据,只把训练数据投入网络,却没把网络的数据分割test占比关掉。而事实上这是个很大的坑,这样相当于浪费了15%的数据。
matlab神经网络工具箱将投入的数据自动分割为三份:70%训练数据,15%泛化验证数据,15%测试数据。测试数据全程什么都没做,工具箱特地留给用户的。
如果自己独自抽出测试数据,记得要把数据分割test占比分配到训练中,如下:
net.divideParam.trainRatio=0.85 ; % 默认0.7 net.divideParam.valRatio=0.15; % 默认0.15 net.divideParam.testRatio=0; % 默认0.15
matlab工具箱提供了非常多的训练方法,刚开始时,总喜欢在不同的方法上试,
实际上matlab推荐的只有2或3种,
一是小数据,内存足,绝对推荐trainlm.效果几乎是无法质疑了。
二是大数据,trainlm跑不动推荐trainscg或trainrp。
这几乎成了定式,在其它方法上试,也有可能有更好的效果,但跑出比trainlm,trainscg,trainrp效果更好的,那真的好难,如果时间不多的同学,建议就如上所用就好。
net.iw,net.lw,net.b(net是训练好的网络)中记录了输入层权重,网络层权重,和阈值,这是毫无疑问的。
代入公式后,却发现和网络sim得到的结果不一致,一直摸索了很久。
最后发现原因是,自matlab2012b之后,网络默认会自动归一化(也可自行关掉),这样提出来的w,b,是自动归一化后的数据训练的网络对应的权重阈值,使用前需要自行将数据归一化,并将结果反归一化,才能与sim对得上。
相关文章
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。