决定在人工神经网络中设置多少层和神经元

我开始通过在线课程学习机器学习,并且觉得这非常有趣。

这些例子很容易理解(用Python编写),结果也令人惊叹,但所有的例子都很简单,并没有解释如何决定隐藏层和隐藏层中需要多少神经元,所以我在谷歌上搜索了相关信息。

大多数结果都说这是艺术和经验的问题,我找到了一篇文章,展示了初学者如何询问在人工神经网络中使用多少隐藏层和神经元,但对于具有大量参数的大数据集,我无法轻易划定界限,有没有一种编程的方式或者更好的方法来知道我需要多少隐藏层和神经元?


回答:

不,这需要通过实验来找到解决你问题的方案。正如你的参考资料所示,层的复杂性是由你的数据的固有复杂性和你试图进行的分类决定的。

作为一般原则,请注意隐藏层是一种最小的便利:线性组合的线性组合不会产生任何额外的学习能力:它仍然是一个线性组合。因此,你只需要一个隐藏层——尽管对于某些问题,使用两个或三个隐藏层会稍微减少训练所需的神经元数量。

当我需要进行这样的设计时,我会简单地处理:从一个隐藏层开始,我的最佳猜测是需要多少神经元。训练模型;如果它无法收敛,查看损失函数以了解它失败的程度。根据这一点,增加神经元(翻倍,10倍,…)然后再试一次。

一旦成功,然后我会逐渐减少神经元数量,直到找到准确性与训练时间之间的“最佳点”。


有些问题无法通过简单的NN(神经网络)轻易解决。根据应用的不同,你可能需要来自深度学习领域的东西,比如一个简单的CNN(卷积神经网络)。

如果你的数据集足够复杂,你可能还想应用PCA(主成分分析)来找出重要的输入参数。你可以然后减少输入数据,大大减少NN的规模和达到收敛所需的训练时间。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注