我有一个前馈神经网络,包含20个输出神经元,我已经尝试过改变隐藏层的数量和每个隐藏层的神经元数量。在测试过程中,我注意到虽然输出并不总是完全相同,但它们在不同测试案例之间的变化非常小,尤其是在彼此之间的对比中。似乎在每个测试案例中,输出几乎(取决于初始权重,在0.0005以内)是相同的;最高的那个总是最高的。为什么会这样呢?
注意:我使用的是前馈神经网络,采用了弹性和常规的反向传播,训练/验证/测试是分开进行的,并且在训练集之间进行了洗牌。
更新:我使用这个网络将4个输入的模式分类到20个输出可能性之一。我有5000个训练集,800个验证集和1500个测试集。轮数可以根据我正在做的事情而变化,在我当前的训练案例中,训练误差似乎收敛得太快(少于20个周期)。然而,我在其他时候也注意到这种不变性,当时误差会在1000个周期内逐渐减少。我还调整了常规传播的学习率和动量。弹性传播在更新时不使用学习率或动量。这是在Encog中实现的。
回答:
你的数据集从一开始就似乎有问题。4个输入对应20个输出似乎太多了。输出的数量通常远小于输入的数量。很可能,要么是数据集的表述有误,要么是你对你试图解决的问题有什么误解。无论如何,关于你其他评论的一些事情:
首先,你不是使用1500个训练集,而是一个包含1500个训练模式的集合。验证和测试也是如此。
其次,输出不可能在每次运行时完全相同,因为权重是随机初始化的,输出取决于它们。然而,我们希望它们在每次运行时相似。如果它们不相似,就意味着它们过度依赖于随机初始化,那么网络就不会运作良好。
在你的情况下,最高的输出是选定的类别,所以如果每次最高的输出都是相同的,那么你的网络运作良好。