本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com
本文简单讲述BP神经网络的建模流程,
通过本文对BP神经网络的建模流程有个初步的概念和印象
本节我们先大概了解一个建模的流程
概述
对于BP神经网络的实际建模,除了BP神经网络的构建,还需要考虑到构建的效果,
在实际建模中,一般需要先对数据进行处理,再进行建模
数据处理分两部分,
👉 1.数据归一化
👉 2.将数据分割为训练数据、验证数据和检验数据
数据进行分割后,每份数据各司其职,为建模效果护航
完成数据归一化和分割后,
再把归一化后的训练数据用于构建BP神经网络,
验证数据则在训练过程中用于监督训练的有效性,
测试数据用于测试训练出来的模型的效果,
整体流程如下
为什么要将数据归一化
归一化就是把数据映射到【-1,1】之间,
为什么要归一化为【-1,1】之间?
因为归一化后,能使网络的特性更加确定、统一、简单,
例如
隐层的输出(也就是它下一层的输入)为【-1,1】,
把输入层的数据归一化后,可以保持所有数据的输入范围一致。
又例如,
tansig的非线性有效区间就大概在【-1.7,1.7】之间,
这样可以把数据统一映射 tansig的有效区间内,
由于这种“简单、确定、统一”能给理论研究省去许多不必要的声明,
因此许多研究结果都是基于这个“简单、确定、统一”的条件前提下,进一步得出研究成果,
这导致在训练过程中,
一些细节的处理,都是依据“输入输出数据范围为【-1,1】”进行量身定造,
例如
梯度下降法中的学习率,如果在归一化的前提下,设为0.1是合理的,
而如果在数据是【-10000000,1000000】,那学习率设为0.1显然就不合理的,
当然,学习率只是一个例子,
用于说明训练细节依赖于“输入数据范围为【-1,1】”这一条件。
总的来说,把数据归一化为【-1,1】,通常能让训练效果更好。
备注:归一化的具体处理,请看《BP神经网络的数据归一化》
为什么要将数据分割
数据分割为三分,训练数据、验证数据和测试数据,
为什么要分割成三份数据,
主要因为训练出的网络在实际使用中不一定准确,
例如,数据产生过拟合时,在实际使用中效果就会很差。
过拟合用较土的话来说,就是为了强行拟合训练数据,导致模型在非训练数据的地方会发疯,
详细请看《过拟合与泛化能力》
为了让模型在实际应用时的效果更好,将数据分割为三份,
下面分别说下三份数据各自的用处
训练数据
训练数据用于模型训练,模型的系数就是通过训练数据求得的
测试数据
测试数据用于模型效果评估,
由于测试数据未参与训练,它的预测效果相对会更接近实际使用的效果,
验证数据
验证数据主要用于监督模型训练,预防模型走向过拟合,
验证数据并未参与模型的训练,只是在训练过程中不断检验模型效果,
如果模型过拟合,由于验证数据也未参与训练,所以验证数据的预测效果就会非常差,
如此一来,
如果出现训练数据误差越来越小,
而验证数据误差越来越大,
则说明模型已经开始走向过拟合,
此时就该停止训练
总的来说,验证数据就是在训练过程不断检验模型,防止模型过走向拟合。
下面我们再简单回顾和总结建模的流程
BP神经网络建模总结
数据处理
在BP神经网络建模时,
一般会先数据归一化,
并将数据分割成训练数据、验证数据和测试数据
模型构建
然后设置好网络结构,并训练网络
由于常用的都是一隐层,tansig+purelin的结构,
因此一般只需设置隐层的隐节点个数,
效果检查
训练完后,
检查训练数据、测试数据的预测效果,
如果两者都满足需求,就可以将BP神经网络网络投入使用了
End