如何选择神经网络中的隐藏层数和节点数? [关闭]

Posted

技术标签:

【中文标题】如何选择神经网络中的隐藏层数和节点数? [关闭]【英文标题】:How to choose number of hidden layers and nodes in neural network? [closed] 【发布时间】:2012-03-15 05:24:34 【问题描述】:

多层感知器神经网络中的隐藏层数对神经网络的行为方式有何影响?隐藏层中的节点数也有同样的问题?

假设我想使用神经网络进行手写字符识别。在这种情况下,我将像素颜色强度值作为输入节点,将字符类作为输出节点。

如何选择隐藏层数和节点数来解决此类问题?

【问题讨论】:

只是为了确定从哪里开始,你知道你需要一个隐藏层吗?顺便说一句,我不认为你能得到这个问题的完美答案 据我了解,隐藏层通常允许更复杂的关系。我知道可能没有完美的答案,但是在决定层/节点的数量时我应该寻找什么? 您应该首先了解为什么您甚至需要隐藏层 (XOR)。 How many hidden layers should I use?How many hidden units should I use? 可能重复:[选择隐藏层数和隐藏层节点数的标准是什么?][1] [估计人工神经网络的神经元数和层数][2 ] [1]:***.com/questions/10565868/… [2]:***.com/questions/3345079/… 【参考方案1】:

注意:这个答案在做出时是正确的,但已经过时了。


在神经网络中很少有超过两个隐藏层。层数通常不会是您非常担心的网络参数。

虽然具有许多层的多层神经网络可以表示 深度电路,训练深度网络一直被视为有点 的挑战。直到最近,实证研究经常发现 深度网络的表现通常不会更好,而且往往更糟, 比具有一两个隐藏层的神经网络。

Bengio, Y. & LeCun, Y., 2007. Scaling learning algorithms towards AI. Large-Scale Kernel Machines, (1), pp.1-41.

所引用的论文对于了解网络深度的影响、深度网络教学的最新进展以及深度学习的总体而言是一个很好的参考。

【讨论】:

这是正确的。从技术上讲,由于attentuation 问题,诸如经过反向传播训练的多层感知器之类的模型存在层数过多的问题。如果您将有许多隐藏层,您将需要研究可以解决此问题的深度学习。 这个观点有点老了。如果您使用预训练,则已证明通过增加层数可以降低错误的上限。 Hinton 也有一些实验表明更多的隐藏单元意味着更好的输入表示和更好的结果。使用整流线性单元时尤其如此。 也许这在 2012 年是正确的,但我不确定现在是否如此。我几乎猜想很少有不超过两层的情况。 @ChrisAnderson,非常真实!我们也在使用不同类型的网络。 我想指出,上面的引述来自 Bengio 和 Lecun 在他们的论文中提到的其他作者,即 [Tesauro,1992]。【参考方案2】:

选择超参数的一般答案是交叉验证。保留一些数据,用不同的配置训练网络,并使用在保留集上表现最好的网络。

【讨论】:

好的,这是一种可靠的方法。但是有没有办法猜测呢?比如,这个数据可以用 10 个主成分很好地解释,所以我们应该有大约 10 个隐藏节点排列在 2 层中?【参考方案3】:

我见过的大部分问题都是用 1-2 个隐藏层解决的。事实证明,只有一个隐藏层的 MLP 是通用函数逼近器 (Hornik et. al.)。更多的隐藏层可以使问题更容易或更难。您通常必须尝试不同的拓扑。我听说如果你想用反向传播训练你的 MLP,你不能添加任意数量的隐藏层,因为第一层的梯度会变得太小(我没有参考)。但是在某些应用程序中,人们使用了 nine layers。也许您对standard benchmark problem 感兴趣,它由不同的分类器和 MLP 拓扑解决。

【讨论】:

【参考方案4】:

除了对不同模型配置(隐藏层数或每层神经元)进行交叉验证这一事实之外,您还可以选择更好的配置。

一种方法是训练一个尽可能大和深的模型,并使用dropout正则化关闭一些神经元并减少过度拟合

可以在本文中看到对这种方法的参考。 https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

【讨论】:

【参考方案5】:

以上所有答案当然都是正确的,但只是为了补充一些想法: 基于本文的一些一般规则如下:'Approximating Number of Hidden layer neurons in Multiple Hidden Layer BPNN Architecture' by Saurabh Karsoliya


一般:

隐藏层神经元的数量是输入层大小的 2/3(或 70% 到 90%)。如果这还不够,那么可以稍后添加输出层神经元的数量。 隐藏层神经元数量应小于输入层神经元数量的两倍。 隐藏层神经元的大小介于输入层大小和输出层大小之间。

请始终牢记,您需要探索和尝试多种不同的组合。此外,使用GridSearch,您可以找到“最佳模型和参数”

例如我们可以进行 GridSearch 以确定隐藏层的“最佳”大小。

【讨论】:

以上是关于如何选择神经网络中的隐藏层数和节点数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

神经网络中如何确定隐藏层的层数和大小

在神经网络开始在训练数据上表现可接受之前的隐藏层数、隐藏层中的单元数和历元数

vgg16 是哪16层,如何确定神经网络的层数和隐藏层神经元数量,CNN,AlexNetVGGNetGoogleNetResNet

vgg16 是哪16层,如何确定神经网络的层数和隐藏层神经元数量,CNN,AlexNetVGGNetGoogleNetResNet

一:输入层隐藏层输出层;二隐藏层的层数

在 Keras 进行修剪