【问题标题】:Number of neurons in the input layer of a feedforward neural network前馈神经网络输入层的神经元数量
【发布时间】:2018-10-20 03:22:24
【问题描述】:
我是Machine Learning 的初学者,正在做基于 11 个输入变量的预测葡萄酒质量(0 到 10)的多类 multiclass classsification task
如何确定前馈neural network 的输入层中的神经元数量?
例如,我的数据集中有 11 个变量。
在输入层我应该保留 11 个神经元吗?
多于/少于 11 个神经元怎么样?
提前致谢!
【问题讨论】:
标签:
python
machine-learning
neural-network
deep-learning
regression
【解决方案1】:
所以我认为指定神经元的数量没有硬性规定。
我通常使用试错法。我用几种不同的架构训练我的网络,直到我得到好的结果。
注意事项
- 更深的网络需要大量时间来训练,因此请尝试构建更小的网络。在这种情况下,准确性和概括性可能会降低。
- 如果您选择更深的网络,请注意在深度网络中非常普遍的梯度消失/爆炸问题。
【解决方案2】:
使用您的网络,您试图逼近一个函数 F(x_1,x_2,..),从某个输入映射到葡萄酒质量的 10 维向量。
在您的情况下,输入可以是 11 个特征,或者可能只有 1 个。例如,如果葡萄酒价格是一个特征,那么价格和质量之间肯定会存在相关性。但是这种相关性可能会粗略地近似“真实函数”。因此,通过在模型中加入更多特征,您可以越来越好地逼近 True 底层函数。但请注意,某些功能可能毫无用处或几乎没有影响!
【解决方案3】:
输入单位:
问题是输入层应该有多少个神经元。你有 11 个变量。因此,使用偏置单元,您将在输入层中总共有 12 个单元。
输出单位:
输出单元的数量将取决于它是回归问题还是分类问题,以及问题有多少输出。例如对于葡萄酒数据集,将有 3 个类。在 one-hot 编码方案中,将有 3 个输出单元,每个类一个。
因此,输入和输出单位由数据集确定(除非您正在做一些疯狂的事情)。
隐藏层和单元:
隐藏层的数量和每个隐藏层的单元数量是必须调整的。对于这个特定的问题,可能没有必要深入研究。一个隐藏层就可以了。虽然,对于较小的数据集,您可以训练具有不同隐藏单元和不同层数的多个模型,并根据验证集分数或交叉验证来选择模型。
用一个带有 5 个隐藏单元、三个输出的隐藏层进行训练。葡萄酒数据集。
用两个隐藏层训练,分别有 10 个和 5 个隐藏单元。
在这两种情况下,偏差单元都存在。在我的例子中,这个特定的葡萄酒数据集有 13 个输入和三个输出,用于三类分类。
由于这对于较大的数据集可能很耗时,因此您可以使用一些启发式方法来选择层数。例如。从一个隐藏层开始,比如 5 个单元。然后训练模型。接下来,使用 10 个单元训练另一个模型,继续添加 5 个单元,训练模型直到验证分数没有太大提升。然后停止向图层添加单位。之后,您可能想要添加另一层并再次更改隐藏单元的数量并继续。
这是一个非常基本的方法。我建议您阅读学术文章以了解有效的方法。使用的方法很多。首先,我想在这里指出您:http://www.ml4aad.org/literature-on-neural-architecture-search/。还要检查AutoML