我在前馈神经网络上有20个输出神经元,为此我已经尝试改变隐藏层的数量和每个隐藏层的神经元数量。在测试时,我注意到虽然输出并不总是完全相同,但它们在不同的测试用例之间变化很小,特别是在彼此之间。它似乎输出几乎(在0.0005取决于初始权重)相同的输出在每个测试用例;最高的永远是最高的。这有什么原因吗?
注意:我使用的是前馈神经网络,具有弹性和常见的反向传播,分离训练/验证/测试,并在训练集之间进行洗牌。
更新:我正在使用网络将4个输入的模式分类为20个输出可能性之一。我有5000个训练集,800个验证集和1500个测试集。回合数可以根据我正在做的事情而变化,在我当前的训练案例中,训练误差似乎收敛得太快(低于20个epoch)。然而,我注意到这种非方差在其他时候,当误差在1000个epoch的周期内减小时。我也调整了学习率和动量,以适应常规的传播。弹性传播不使用学习率或动量进行更新。这是使用Encog.
您的数据集似乎一开始就有问题。4个输入20个输出似乎太多了。输出的数量通常比输入的数量少得多。最有可能的情况是,要么数据集的形式是错误的,要么您在试图解决的问题中误解了某些东西。不管怎样,关于你的其他评论:
首先,你没有使用1500个训练集,而是一个有1500个训练模式的集。验证和测试也是如此。
其次,每次运行时输出的不可能完全相同,因为权重是随机初始化的,输出依赖于它们。然而,我们希望它们在每次运行时都相似。如果它们不是,就意味着它们过于依赖随机初始化,所以网络就不能很好地工作。在您的示例中,最高输出是所选的类别,因此如果每次网络运行良好时相同的输出都是最高的。
如果网络对不同输入模式的输出几乎相同,则网络无法很好地对输入进行分类。
你说你的网络有4个输入节点和20个输出节点(对吗?)所以有2*2*2*2 = 16种不同的可能输入模式。为什么需要800个验证集?您的训练数据可能损坏