我目前正在为具有387个特征和3000个样本的数据集构建一个nn。输出是3类。我将网络结构配置如下:
输入 - > 200-> {300-> 100} - >> 50->输出
我选择了正确数量的节点和图层吗?如何确定每个层的节点数(输入,隐藏和输出)?有没有规则?
答案 0 :(得分:23)
作为Yoshua Bengio,蒙特利尔学习算法研究所所长remarks:
“非常简单。只需继续添加图层,直到测试错误不再改善。”
Geoff Hinton推荐的方法是添加图层,直到你开始过度训练你的训练集。然后添加dropout或其他正则化方法。
为您的任务:
答案 1 :(得分:14)
规则?尽可能多的你没有。以下是Neural Network FAQ的摘录,这是一个很好的页面来咨询基本问题:
- 醇>
答:我应该使用多少隐藏单位? ==========================================
无法从中确定良好的网络拓扑 输入和输出的数量。这主要取决于数量 训练样例和分类的复杂性你 正在努力学习。一个输入和一个输入存在问题 需要数百万个隐藏单位的输出,以及一个问题 百万输入和百万输出只需要一个隐藏 单位,或根本没有 有些书籍和文章提供“规则” 拇指“选择拓扑 - Ninputs加Noutputs分开 两个,也许在那里有一个平方根 - 但是这样 规则是总垃圾。其他规则与数量有关 可用示例:最多使用这么多隐藏单元,网络中权重的数量乘以10的数量小于该数量 例子。这些规则只涉及过度拟合而且是 也不可靠。
但是,在您的情况下,可以肯定地说网络过于复杂(即使您应用了强大的正则化)。为什么这么多隐藏层?从一个隐藏层开始 - 尽管有深刻的学习兴奋 - 并且具有最少的隐藏节点。增加隐藏的节点数,直到获得良好的性能。只有不是我会添加更多图层。此外,使用交叉验证和适当的正规化。
答案 2 :(得分:3)
正如他们所说,计算神经网络的隐藏层数和节点数没有“神奇”规则,但有一些提示或推荐可以帮助您找到最好的。
隐藏节点的数量基于以下关系:
为了最大限度地减少错误并使训练有素的网络得到很好的推广,您需要选择最佳数量的隐藏层以及每个隐藏层中的节点。
太少的节点会导致系统出现高误差,因为预测因素可能过于复杂而无法捕获少量节点
太多的节点会过度填充您的训练数据而不能很好地概括
您可以在此页面上找到一些一般性建议:
Section - How many hidden units should I use?
如果您的数据是线性可分的,那么您根本不需要任何隐藏层。否则,就添加额外隐藏层的性能差异达成共识:第二(或第三等)隐藏层的性能提升的情况非常小。因此,一个隐藏层足以解决大多数问题。
有一些经验导出的经验法则,其中最常用的是“隐藏层的最佳大小通常介于输入大小和输出层大小之间”。
总之,对于大多数问题,通过仅使用两个规则设置隐藏层配置,可能会获得不错的性能:
答案 3 :(得分:0)
尽管没有经验法则可以选择隐藏层的数量和每层中神经元的数量,但这可能会有所帮助。
神经元数量:
0-仅能表示线性可分离函数或决策。
1-可以近似包含连续映射的任何函数 从一个有限的空间到另一个有限的空间。
2-可以代表任意精度的任意决策边界 具有合理的激活函数,可以近似于任何平滑 映射到任何精度。
答案 4 :(得分:0)
this StackExchange 帖子中有许多不同的方法,非常好!