我目前正在研究对象分类问题,我正在使用OpenCV来编写基于人工神经网络的对象分类器模型。我使用128元素SURF描述符来描述对象。目前,我已经定义了6个对象类。
我想在opencv中定义基于MLP的神经网络,并在SURF描述符上训练它以准备对象分类模型。然而,在定义基于MLP的神经网络时,我需要提供MLP中的输入节点数,隐藏节点数和输出节点数。根据我的理解,输入节点的数量等于描述对象的属性的数量(因此我在我的情况下使用了128个输入节点),输出节点的数量等于对象类的数量(这是6在我的情况下)。我有两个问题:
我已经通过互联网搜索以及stackoverflow,但我对用于选择隐藏节点数量的方法感到困惑。从互联网上看,似乎在命中和试验的基础上选择了隐藏节点的数量,但我认为三个输入之间必然存在某种关系。任何参考或帮助将不胜感激。
答案 0 :(得分:0)
通常,节点数与训练/概括错误之间存在关系。隐藏层用于直接识别输入中的模式。节点太少,你的网络将不合适,即它将无法识别你想要的那么多复杂模式。太多,它会过度拟合,即它会识别你训练它的一切,但没有别的(没有"泛化",即识别以前未知的模式 - 这就是你首先创造它的原因) 。另见this link。所以神奇数字是"介于两者之间"中间,我指的是输入数量和输出数量之间。那要尝试什么?不幸的是,没有一般的数字或关系可以保证解决。但一个好的起点是隐藏节点的数量为1/2 *(输入节点+输出节点),因此,只是两者之间的算术平均值。从那以后,您可以通过计算不同数量的隐藏层节点的训练和验证错误来开始实验。在大脑中,从一层到另一层的神经元数量也像金字塔一样建立起来,你可以肯定它是有充分理由的。
基本上,同样的问题也已经been answered here.