我们应该如何在神经网络中设置隐藏层中的神经元数量?

时间:2016-08-04 06:08:59

标签: python-2.7 machine-learning neural-network

在神经网络理论中 - 设置隐藏层的大小似乎是一个非常重要的问题。有没有标准如何选择隐藏层中的神经元数量?

3 个答案:

答案 0 :(得分:2)

是的 - 这是一个非常重要的问题。基本上有两种方法可以做到这一点:

  1. 尝试不同的拓扑并选择最佳:由于神经元和图层的数量是离散参数这一事实,您无法区分损失函数与此参数,以便使用梯度下降方法。因此,最简单的方法是简单地设置不同的拓扑结构,并使用交叉验证或训练集的划分来比较它们 - 训练/测试/验证部分。您还可以使用网格/随机搜索架构来执行此操作。像scikit-learn这样的库有适当的模块。
  2. Dropout:名为dropout的培训框架也可以提供帮助。在这种情况下,您在图层中设置了相对较多的节点,并尝试为每个图层调整一个dropout参数。在这种情况下 - 例如假设您的隐藏层中有100dropout_parameter = 0.6节点的双层网络,您正在学习混合模型 - 其中每个模型都是一个大小为40的神经网络(约60个节点已关闭)。这也可能被视为为您的任务找出最佳拓扑结构。

答案 1 :(得分:1)

还有一些其他算法用于动态创建和修剪隐藏层神经元。我最熟悉的是Cascade Correlation,它可以为许多应用程序提供相当好的性能,尽管隐藏层以单个神经元开始并根据需要添加其他神经元。

如需进一步阅读,请参阅:

Scott E. Fahlman和Christian Lebiere的原始论文,The Cascade- Correlation Learning Architectur e。

•GáborBalázs'Cascade Correlation Neural Networks: A Survey.

•Lutz Precehelt的Investigation of the CasCor Family of Learning Algorithms Investigation of the CasCor Family of Learning Algorithms

还有许多其他这样的动态构建隐藏层的算法,可以在各种.pdf研究论文中分散在互联网上。一些调查可能是值得的,以避免重新发明轮子,并可能找到你正试图解决的问题的正确方法。神经网络研究分布在许多不同的学科中,所以没有人知道那里还有什么;跟踪所有新算法是一个令人生畏的前景。我希望这有帮助。

答案 2 :(得分:1)

您必须设置隐藏图层中的神经元数量,使其不应超过您的训练示例的#。神经元的数量没有拇指规则。 例如:如果您使用的是MINIST数据集,那么您可能拥有~78K的训练示例。因此,请确保神经网络(784-30-10)= 784 * 30 + 30 * 10的组合少于训练示例。但是如果你使用like(784-100-10)那么它超过训练样例的#并且极有可能过度拟合。 简而言之,确保你没有过度适应,因此你有很好的机会获得好成绩。