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