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

Sim*_*ful 18 machine-learning neural-network deep-learning

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

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

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

and*_*ndy 23

图层

正如蒙特利尔学习算法研究所所长Yoshua Bengio 所言:

"非常简单.只需继续添加图层,直到测试错误不再改善为止."

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

节点

为了你的任务:

  • 输入层应包含每个功能的387个节点.
  • 输出层应包含每个类的3个节点.
  • 隐藏层我发现每层中神经元的数量逐渐减少很有效(这个提示和技巧列表在为压缩任务创建自动编码器时同意这一点).也许在第一个隐藏层中尝试200,在第二个中尝试100; 再次,它是一个要优化的超参数,并且非常依赖于数据集大小.

  • @kRazzyR输入具有387个要素,因此Input层包含387个节点,每个要素一个节点。 (2认同)

dav*_*igh 15

规则是什么?尽可能多的你没有.以下是神经网络常见问题解答的摘录,这是一个很好的页面,可以咨询基本问题:

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

    无法根据输入和输出的数量确定良好的网络拓扑.这主要取决于培训示例的数量以及您尝试学习的分类的复杂程度.一个输入和一个输出存在问题,需要数百万个隐藏单元,并且有一百万个输入和一百万个输出的问题只需要一个隐藏单元,或者根本不需要.
    一些书籍和文章为选择拓扑学提供了"经验法则" - Ninputs加上Noutputs由两个分开,也许在那里有一个平方根 - 但这样的规则是完全垃圾.其他规则与可用示例的数量有关:使用最多这样的隐藏单元,网络中的权重数量10小于示例数量.这些规则只涉及过度拟合,也不可靠.

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


omo*_*tto 6

正如他们所说,没有“神奇”的规则来计算神经网络的隐藏层和节点的数量,但是有一些技巧或建议可以帮助您找到最好的规则。

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

  • 输入输出节点数
  • 可用的训练数据量
  • 尝试学习的函数的复杂性
  • 训练算法

为了最小化错误并拥有一个具有良好泛化能力的经过训练的网络,您需要选择最佳数量的隐藏层以及每个隐藏层中的节点。

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

  • 太多的节点会过度拟合您的训练数据并且不能很好地概括

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

部分 - 我应该使用多少个隐藏单元?

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

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

总而言之,对于大多数问题,只需使用两个规则设置隐藏层配置即可获得不错的性能:

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