2015-02-17 87 views
2

我一直在尝试实现一段时间的反向传播神经网络,并且我一次又一次地面临问题。目前的进展是,我的神经网络适用于XOR,AND和OR。多类神经网络问题

下面的图片显示了我的神经网络训练XOR超过100000次迭代,它似乎收敛良好。为此,我有2个输入神经元和与2个神经元的隐藏层的单个输出神经元它[虽然1就已经足够了] enter image description here

现在正在进行向前我训练同一网络的两个区分在XY平面内的坐标为两个类与2输入神经元和1个输出神经元和单隐层的相同结构具有两个神经元: Dataset enter image description here

下一个I训练它仅但具有2个输出神经元和结构的保持其余两个类同样的,这段时间需要很长时间才能收敛,但它确实如此。 enter image description here 但现在我增加到三班; A类为100和B类将是010和C级将是001,但现在,当我训练它,然后它从来没有收敛,并让我对下面显示的数据如下结果: enter image description here enter image description here

它似乎永远不会汇聚。我观察到这种模式,如果我增加输出层神经元的数量,错误率就像任何东西一样增加?我可以指导我去哪里我错了吗?

+0

输出神经元的逻辑级别是什么?绿色为0-0.3,蓝色为0.3-0.7,红色为0.7-1.0? – 2015-02-17 23:58:23

+0

不!实际上我的输出层有3个神经元,所以如果它归类为A类,那么输出层的第一个神经元应该被触发,并且该层的完整输出将是100,并且类似地,如果b类然后完成输出将是010等等 – 2015-02-18 00:09:49

+0

什么是这些产出的总和? – 2015-02-18 00:11:21

回答

5

如果您从二进制分类转移到多类分类,则必须推广反向传播算法以正确处理两个以上的类。

到二元分类的主要区别是,该更新更改:

update

与:

y

是其中选择参数Y(输出)的新得分得出特征的最高分数乘以权重向量w。这种策略被称为one-vs.-rest。写为伪代码(from here):

pseudocode

请记住,根据自己的特定代码,您可能需要执行其他变化(如地图的实值输出到二进制输出每输出单元)至你当前的代码。

,如果你有由要划分多个independent属性你具有每类1个的二进制输出节点的体系结构是完全没有问题。否则,您应该考虑使用输出层softmax(有关实现示例,请参阅here)。在输出层中使用softmax激活会将原始值转换为后验概率(而不是每个类的二进制输出)。既然这给你一个确定性的措施,它也给你更多的见解。

+3

我对神经网络一无所知,但这是一个很酷的答案。 – Luminous 2015-02-18 13:16:31

+0

@发光的谢谢! – runDOSrun 2015-02-18 13:17:12

+0

感谢您的回答!但我会学习很多东西来理解你在这里所提出的观点,然后去实现你所建议的改变......但是真正感谢你所拥有的所有资源:) – 2015-02-18 15:00:09