2016-02-20 764 views
13

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

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

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

+0

[多层感知器(MLP)体系结构的可能重复:选择隐藏层的数量和隐藏层的大小的标准?](http://stackoverflow.com/questions/10565868/multi-layer- perceptron-mlp-architecture-criteria-for-choosing-number-of-hidde) – OmG

+0

那么在输入层应该有多少个节点呢? –

回答

10

规则?尽可能多的,而不是。下面是从Neural Network FAQ这是一个良好的网页基本问题需要咨询的摘录:

  • 答:隐藏着多少单位要我用? ==========================================

    没有办法确定一个良好的网络拓扑结构,只需从输入和输出的数量即可。这关键取决于训练实例的编号 以及您尝试学习的分类的复杂程度。有一个输入和一个输出 问题,需要数以百万计的隐藏单元,以及问题与 亿投入和仅需要一个隐藏 单位,或者根本就没有百万输出。
    一些书籍和文章提供“ 拇指规则”选购topopology - Ninputs加Noutputs在由两个dividied ,可能与平方根的某个地方 - 但这种 规则垃圾总量。其他规则涉及到 实例可用数量:在使用最让许多隐藏的单位,权重的网络时代10数大于应用的数量 较小。这样的规则只涉及过度拟合,并且也是不可靠的。

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

    12

    由于约书亚·本焦,蒙特利尔学院学习算法主管remarks

    “很简单只要保持增加层数,直到测试误差已不提高。”

    由杰夫·辛顿推荐的方法是,直到你开始你的过度拟合训练集添加图层。然后你添加丢失或另一种正则化方法。

    节点

    您的任务:

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

    为什么387为第一层?我不关注 –

    +1

    @kRazzyR输入有387个特征,因此输入层包含387个节点,每个特征有一个节点。 –

    3

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

    隐藏节点的数量是基于之间的关系:

    • 输入和输出节点的数量
    • 金额可用测试数据
    • 复杂性正在努力学习
    • 功能的
    • 训练算法

    为了最大限度地减少错误,并有一个训练有素的网络,ge neralizes well,你需要挑选最佳数量的隐藏层,以及每个隐藏层中的节点。

    • 节点太少会导致高误差为您的系统作为预测因素可能是太复杂,节点数量少捕捉

    • 节点过多会过度拟合到你的训练数据,而不是推广以及

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

    Section - How many hidden units should I use?

    如果您的数据是线性可分的,那么您根本不需要任何隐藏层。否则就增加隐藏层而导致的性能差异达成共识:第二层(或第三层等)隐藏层的性能改善情况非常小。因此,对大多数问题来说,一个隐藏层就足够了。

    有一些经验派生的经验法则,其中最常见的依据是'隐藏层的最佳大小通常在输入大小和输出层大小之间'。

    • 隐藏层的数量等于一个
    • 神经元的数量:

      总之,对于大多数问题,一个很可能只用两个规则设置隐藏层的配置获得不俗的表现层是输入和输出层中神经元的平均值。