编程语言
首页 > 编程语言> > java – 多类神经网络问题

java – 多类神经网络问题

作者:互联网

我一直试图实现反向传播神经网络一段时间,我一次又一次地面临问题.到目前为止的进展是我的神经网络适用于XOR,AND和OR.

下图显示我的神经网络训练超过100000次迭代的XOR,它似乎收敛良好.为此,我有2个输入神经元和一个输出神经元,隐藏层有2个神经元[虽然1已经足够]

现在我正在向前推进训练相同的网络,将XY平面中的坐标分成两个类,其中2个输入神经元和1个输出神经元的结构相同,单个隐藏层有两个神经元:

对于接下来的训练我只训练了两个班级,但是有两个输出神经元,并保持结构的其余部分相同,这次确实需要很长时间才能收敛,但确实如此.

 但现在我增加到三个班级; A类将是100而B类将是010而C类将是001但现在当我训练它时它永远不会收敛并给出以下数据如下所示:

它似乎永远不会收敛.我已经观察到这种模式,如果我增加输出层中的神经元数量,错误率会像任何东西一样增加?我可以指引我到哪里出错吗?

解决方法:

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

与二进制分类的主要区别在于更新更改为:

有:

作为新分数,其中选择参数y(输出),其产生特征的最高分数乘以权重向量w.这个策略叫做one-vs.-rest.写成伪代码(from here):

请记住,根据您自己的特定代码,您可能必须执行其他更改(例如,将实际值输出映射到每个输出单元的二进制输出)到当前代码.

如果您有多个independent属性可用于分类,则每个类具有1个二进制输出节点的体系结构完全正常.否则,您应该考虑使用softmax输出层(有关实现示例,请参阅here).在输出层中使用softmax激活会将原始值转换为后验概率(而不是每个类的二进制输出).由于这可以为您提供一定的确定性,因此它也可以为您提供更多洞察力.

标签:java,neural-network,backpropagation
来源: https://codeday.me/bug/20190830/1765663.html