我正在尝试理解如何训练多层感知器网络;然而,我在确定合适的网络架构时遇到了麻烦——即,如何决定网络中每层的节点/神经元数量。
对于一个特定任务,我有四个输入源,每个输入源可以输入三种状态中的一种。我猜这意味着有四个输入神经元可以输出0、1或2,但据我所知,输入应该保持二进制?
此外,我在选择隐藏层的神经元数量时也遇到了问题。任何评论都将不胜感激。
谢谢。
回答:
确定多层感知器的可接受网络结构实际上是直截了当的。
-
输入层:你的数据有多少特征/维度——即,每行数据有多少列。在此基础上加一(用于偏置节点),这就是第一层(输入层)的节点数量。
-
输出层:你的多层感知器是运行在“分类”模式还是“回归”模式(此处“回归”指的是机器学习中的概念,而非统计学意义上的回归)——即,我的多层感知器是返回一个类别标签还是一个预测值?如果是后者,那么你的输出层只有一个节点。如果是前者,那么你的输出层节点数量与类别标签数量相同。例如,如果你想要的结果是将每个实例标记为“欺诈”或“非欺诈”,那就是两个类别标签,因此,输出层有两个节点。
-
隐藏层:在这两层(输入层和输出层)之间显然是隐藏层。总是从单个隐藏层开始。那么,隐藏层需要多少节点呢?这里有一个经验法则:将隐藏层的(初始)大小设置为略大于输入层节点数量的节点数。与输入层节点数较少的情况相比,这种多余的容量将有助于你的数值优化例程(例如,梯度下降)收敛。
总之,开始时你的网络架构应包含三层;第一层(输入层)和最后一层(输出层)的大小分别由你的数据和模型设计决定。一个略大于输入层的隐藏层几乎总是开始时的好设计。
所以在你的情况下,一个合适的网络结构开始应该是:
输入层:5个节点 –> 隐藏层:7个节点 –> 输出层:3个节点