多类神经网络问题

Kun*_*nda 3 java backpropagation neural-network

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

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

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

对于接下来的训练我只训练了两个班级,但是有2个输出神经元,并保持结构的其余部分相同,这段时间需要很长时间才能收敛但是确实如此. 在此输入图像描述 但现在我增加到三个班级; A类将是100而B类将是010而C类将是001但现在当我训练它时它永远不会收敛并给出以下数据如下所示: 在此输入图像描述 在此输入图像描述

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

run*_*run 5

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

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

更新

有:

ÿ

作为新分数,其中选择参数y(输出),其产生特征的最高分数乘以权重向量w.这种策略被称为一对一休息.写为伪代码(从这里):

伪代码

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

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

  • 我对神经网络一无所知,但这是一个很酷的答案. (3认同)