如何确定神经网络的层数和节点数

时间:2016-02-20 07:51:26

标签: machine-learning neural-network deep-learning

我目前正在为具有387个特征和3000个样本的数据集构建一个nn。输出是3类。我将网络结构配置如下:

输入 - > 200-> {300-> 100} - >> 50->输出

我选择了正确数量的节点和图层吗?如何确定每个层的节点数(输入,隐藏和输出)?有没有规则?

5 个答案:

答案 0 :(得分:23)

作为Yoshua Bengio,蒙特利尔学习算法研究所所长remarks

“非常简单。只需继续添加图层,直到测试错误不再改善。”

Geoff Hinton推荐的方法是添加图层,直到你开始过度训练你的训练集。然后添加dropout或其他正则化方法。

节点

为您的任务:

  • 输入图层应包含每个功能的387个节点。
  • 输出图层每个类应包含3个节点。
  • 隐藏层我发现逐层减少数量,每层中的神经元运行良好(this list of tips and tricks在为压缩任务创建自动编码器时同意这一点)。也许在第一个隐藏层中尝试200,在第二个中尝试100;再次,它是一个要优化的超参数,并且非常依赖于数据集大小。

答案 1 :(得分:14)

规则?尽可能多的你没有。以下是Neural Network FAQ的摘录,这是一个很好的页面来咨询基本问题:

  
      
  1. 答:我应该使用多少隐藏单位? ==========================================

         

    无法从中确定良好的网络拓扑   输入和输出的数量。这主要取决于数量   训练样例和分类的复杂性你   正在努力学习。一个输入和一个输入存在问题   需要数百万个隐藏单位的输出,以及一个问题   百万输入和百万输出只需要一个隐藏   单位,或根本没有   有些书籍和文章提供“规则”   拇指“选择拓扑 - Ninputs加Noutputs分开   两个,也许在那里有一个平方根 - 但是这样   规则是总垃圾。其他规则与数量有关   可用示例:最多使用这么多隐藏单元,网络中权重的数量乘以10的数量小于该数量   例子。这些规则只涉及过度拟合而且是   也不可靠。

  2.   

但是,在您的情况下,可以肯定地说网络过于复杂(即使您应用了强大的正则化)。为什么这么多隐藏层?从一个隐藏层开始 - 尽管有深刻的学习兴奋 - 并且具有最少的隐藏节点。增加隐藏的节点数,直到获得良好的性能。只有不是我会添加更多图层。此外,使用交叉验证和适当的正规化。

答案 2 :(得分:3)

正如他们所说,计算神经网络的隐藏层数和节点数没有“神奇”规则,但有一些提示或推荐可以帮助您找到最好的。

隐藏节点的数量基于以下关系:

  • 输入和输出节点数
  • 可用的培训数据量
  • 正在尝试学习的功能的复杂性
  • 训练算法

为了最大限度地减少错误并使训练有素的网络得到很好的推广,您需要选择最佳数量的隐藏层以及每个隐藏层中的节点。

  • 太少的节点会导致系统出现高误差,因为预测因素可能过于复杂而无法捕获少量节点

  • 太多的节点会过度填充您的训练数据而不能很好地概括

您可以在此页面上找到一些一般性建议:

Section - How many hidden units should I use?

如果您的数据是线性可分的,那么您根本不需要任何隐藏层。否则,就添加额外隐藏层的性能差异达成共识:第二(或第三等)隐藏层的性能提升的情况非常小。因此,一个隐藏层足以解决大多数问题。

有一些经验导出的经验法则,其中最常用的是“隐藏层的最佳大小通常介于输入大小和输出层大小之间”。

总之,对于大多数问题,通过仅使用两个规则设置隐藏层配置,可能会获得不错的性能:

  • 隐藏图层的数量等于一个
  • 该层中的神经元数量是输入和输出层中神经元的平均值。

答案 3 :(得分:0)

尽管没有经验法则可以选择隐藏层的数量和每层中神经元的数量,但这可能会有所帮助。

神经元数量:

0-仅能表示线性可分离函数或决策。

1-可以近似包含连续映射的任何函数 从一个有限的空间到另一个有限的空间。

2-可以代表任意精度的任意决策边界 具有合理的激活函数,可以近似于任何平滑 映射到任何精度。

答案 4 :(得分:0)

this StackExchange 帖子中有许多不同的方法,非常好!