Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多类神经网络问题_Java_Neural Network_Backpropagation - Fatal编程技术网

Java 多类神经网络问题

Java 多类神经网络问题,java,neural-network,backpropagation,Java,Neural Network,Backpropagation,我已经尝试实现反向传播神经网络有一段时间了,我一次又一次地面临问题。到目前为止的进展是,我的神经网络可以很好地用于XOR和OR 下图显示了我的神经网络在100000次迭代中对XOR的训练,它似乎收敛得很好。为此,我有两个输入神经元和一个输出神经元,其中一个隐藏层有两个神经元[尽管1个就足够了] 现在继续前进,我将同一网络在XY平面上的两个区分坐标训练为两类,具有相同结构的2个输入神经元和1个输出神经元,以及具有两个神经元的单个隐藏层: 接下来,我只训练了两个班,但有两个输出神经元,并保持结构

我已经尝试实现反向传播神经网络有一段时间了,我一次又一次地面临问题。到目前为止的进展是,我的神经网络可以很好地用于XOR和OR

下图显示了我的神经网络在100000次迭代中对XOR的训练,它似乎收敛得很好。为此,我有两个输入神经元和一个输出神经元,其中一个隐藏层有两个神经元[尽管1个就足够了]

现在继续前进,我将同一网络在XY平面上的两个区分坐标训练为两类,具有相同结构的2个输入神经元和1个输出神经元,以及具有两个神经元的单个隐藏层:

接下来,我只训练了两个班,但有两个输出神经元,并保持结构的其余部分不变,这确实花了很长时间来收敛,但它做到了。 但现在我增加到三个班;A类将为100,B类将为010,C类将为001,但现在当我对其进行训练时,它将不会收敛,并给出以下数据的结果:


它似乎永远不会收敛。我已经观察到这种模式,如果我增加输出层神经元的数量,错误率会像任何事情一样增加?有人能告诉我哪里出了问题吗?

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

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

与:

选择参数y(输出)的新分数,该参数为特征的最高分数乘以权重向量w。这种策略被称为。编写为伪代码():

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


如果您有多个用于分类的属性,那么每个类有一个二进制输出节点的体系结构是非常好的。否则,您应该考虑使用输出层(参见实现示例)。在输出层使用softmax激活将原始值转换为后验概率(与每个类的二进制输出相反)。因为这给了你一个确定性的度量,它也给了你更多的洞察力。

什么是逻辑的输出层次?0-0.3表示绿色,0.3-0.7表示蓝色,0.7-1.0表示红色?不!实际上,我的输出层有3个神经元,所以如果它被归类为A类,那么输出层的第一个神经元应该被触发,并且该层的完整输出将是100,同样地,如果是b类,那么完整输出将是010,依此类推,这些输出的和是什么?输出的和??。。我只把上面描述的作为我的最终输出。。在理想情况下,我的输出将是[1.0,0.0,0.0]或[0.0,1.0,0.0]或[0.0,0.0,1.0]。。我希望这能让我的问题变得更清楚。只是出于兴趣,我注意到了Java标记。。你用什么神经网络库来做这个?我对神经网络一无所知,但这是一个很酷的答案。谢谢你的回答!但是我需要做大量的研究来理解你在这里提出的观点,然后实施你建议的改变。。但非常感谢您提供的所有资源:)