我正在努力了解如何训练多层; 但是,我在确定如何确定合适的网络架构时遇到了一些麻烦 - 即网络每层中的节点/神经元数量.
对于特定任务,我有四个输入源,每个输入源可以输入三种状态之一.我猜这意味着四个输入神经元会触发0,1或2,但据我所知,输入应保持二进制?
此外,我有一些问题选择隐藏层中的神经元数量.任何评论都会很棒.
谢谢.
我在几点上不同意道格的答案.
您有4个离散(3路分类)输入.你应该(除非你有充分的理由不这样做)将这两个二进制输入表示为四个概念输入中的每一个使用1-of-3编码.因此,如果您输入的是[2,0,1,1],那么您的网络应该被给出:0 0 1 1 0 0 0 1 0 0 1 0如果您的网络实现需要手动偏置,那么您应该另外添加另一个对于偏见,但大多数明智的神经网络实现并不需要这样做.
尝试几个不同数量的隐藏单位.您不需要将自己限制为小于输入图层大小的隐藏图层大小,但是如果您将其设置得更大,则应该小心定期调整您的权重,可能使用L2或L1重量衰减,甚至可能提前停止在培训中(当您在保持的验证集上的错误停止改进时停止培训).
确定多层感知器的可接受网络结构实际上是直截了当的.
输入层:数据中有多少个特征/维度 - 即每个数据行中有多少列.添加一个(对于偏置节点),这是第一个(输入层)的节点数.
输出层:你的MLP是在"机器"模式还是"回归"模式下运行(在机器学习中使用"回归"而不是统计意义) - 即,我的MLP是否返回类别标签或预测值?如果是后者,则输出层有一个节点.如果是前者,那么您的输出层与类标签具有相同数量的节点.例如,如果您想要的结果是将每个实例标记为"欺诈"或"非欺诈",那么这是两个类标签,因此,输出层中有两个节点.
隐藏层:在这两者之间(输入和输出)显然是隐藏层.始终以单个隐藏层开始.那么H \节点多少?这是一条经验法则:将隐藏层的(初始)大小设置为某些节点数,这些节点数略大于输入层中的节点数.与具有比输入层更少的节点相比,这种过剩的容量将有助于您的数值优化例程(例如,梯度下降)收敛.
总而言之,从网络架构的三层开始; 第一个(输入)和最后一个(输出的大小分别由您的数据和模型设计确定.隐藏层略大于输入层几乎总是一个好的设计开始.
所以在你的情况下,一个合适的网络结构将是:
输入层:5个节点 - > 隐藏层:7个节点 - > 输出层:3个节点