我正在训练一个神经网络,并从随机权重开始。训练后,权重发生了变化,但神经网络的准确性与起始权重相同。不管我如何改变网络的架构。隐藏层中的节点数、迭代次数和特征数(使用 PCA 进行降维)得出的精度与开始时相同。这可能是因为相对于特征数量的示例数量较少吗?(我有 675 个示例和 9000 个特征)。还是因为其他原因?我还用逻辑回归尝试了相同的数据集,它能够达到 64% 的准确率,但并不好,它比我在使用神经网络训练前后得到的 50% 好得多。
3 回答
一般来说,您的训练示例应该比您的特征多几个数量级,而不是相反。这会伤害到你,除非你的 PCA 让事情变得非常糟糕。
你确实记得标准化你的特征,对吧?这通常在 PCA 中得到解决,但有时您必须先进行标准化,具体取决于您使用的软件。
除此之外,你没有提到改变学习率、使用自适应学习率或使用动量项,所以我建议你研究一下。此外,除了普通的旧反向传播之外,还有更多的权重更新算法。Levenberg-Marquardt 算法可能值得一试。你的实现可能已经有了这个,假设你不是自己写的。
某种形式的提前停止也可能有用。
您没有提到您是要进行分类还是回归。如果您正在进行分类,请确保输出节点上的激活函数与您使用的类标签类型相匹配。Logsig 的范围是 0 到 1,而 Tansig 是 -1 到 1。如果您在进行回归,请确保输出具有线性激活,或者至少可能输出的范围与您的训练示例匹配。
首先,分类精度,取决于数据集。所有人工智能方法都试图在向量空间中分离数据。但是,数据可能一开始就不可分离,在某些情况下,64% 可能非常接近可能的最佳结果。您使用的是哪种数据集(它是众所周知的基准之一,还是您要解决的某些特定问题??)
其次,权重变化并不一定意味着网络正在接受训练。训练后,您不应该检查权重是否发生变化,而是检查总平方误差是否减少。如果它没有显着减少,则您的网络可能根本没有经过训练。在您的情况下,如果训练后准确率保持在 50%(我想您是在谈论一个二分类问题),那么该方法很可能根本不起作用。您应该首先在一个更简单的数据集上尝试它,以检查它是否有效。
而且:
- 如果你想训练一个多层感知器,9000 个特征太多了。您可能需要 SVM 来解决如此复杂的问题。
- 对于这样的问题,实例的数量很可能太少(但是,如果两个类之间的模式在问题空间中太远)
如果您正在进行分类,问题可能出在您的标签上。
我在 Octave 中训练神经网络时遇到了类似的问题。准确度约为 50%。我有两个标签 0 和 1。我的准确度很低,因为 octave 从 1 而不是 0 开始索引。您可能需要查看标签。