0

我使用具有 3 层的神经网络来解决分类问题:1)~2k 个神经元 2)~2k 个神经元 3)20 个神经元。我的训练集由 2 个示例组成,每个示例中的大部分输入都是零。出于某种原因,在反向传播训练之后,网络为两个示例提供了几乎相同的输出(这要么仅对 1 个示例有效,要么对于其中一个示例具有 1 的输出具有 1.0)。它在第一个 epoch 之后进入这个状态,之后变化不大,即使学习率是最小的双倍值。我使用 sigmoid 作为激活函数。我认为我的代码可能有问题,所以我使用了 AForge 开源库,似乎也遇到了同样的问题。这里可能有什么问题?

解决方案:我已经移除了一层并将隐藏层中的神经元数量减少到 800

4

2 回答 2

3

2000 到 2000 到 20 是巨大的。这大约需要确定 400 万个权重,这意味着算法必须搜索 400 万维空间。在这种情况下,任何优化算法都会完全不知所措。我假设您正在使用梯度下降,它甚至没有那么强大,因此该算法很可能在这个巨大的搜索空间中的某个地方陷入了局部最优。

简化您的模型!

添加:

并且还请更详细地描述您正在尝试做的事情。你真的只有 2 个训练样例吗?这就像尝试使用 400 万维平面对 2 个点进行分类。这对我来说没有意义。

于 2012-09-27T09:14:33.507 回答
0

您提到大多数输入为零。为了减少搜索空间的大小,请尝试删除训练示例中的冗余。例如,如果

trainingExample[0].inputValue[i] == trainingExample[1].inputValue[i] 

那么 x.inputValue[i] 没有 NN 的信息承载数据。

另外,也许不清楚,但似乎两个训练示例似乎很小。

于 2014-09-01T22:19:20.297 回答