2012-05-08 94 views
1

我正在训练一个神经网络,并从随机权重开始。训练后,权重发生变化,但神经网络的准确性与起始权重相同。无论如何改变网络的体系结构。隐藏层中的节点数量,迭代次数和特征数量(使用PCA降维)它具有与开始时相同的精度。这可能是因为关于功能数量的例子数量很少? (我有675个例子和9000个特征)。或者这是因为别的吗?此外,我尝试了使用logistic回归的相同数据集,它能够达到64%的准确率,而不是比我在神经网络训练之前和之后得到的50%好得多。神经网络权重和成本变化,但不是它的准确性

回答

3

一般来说,你的训练样例应该超过你的特征数量级,而不是相反。除非您的PCA将事情降低很多,否则这将会伤害您。

你确实记得规范你的功能,对吧?这通常在PCA中处理,但有时您必须首先进行标准化,具体取决于您使用的软件。

除此之外,你没有提到改变学习率,使用自适应学习率,或使用动量项,所以我会建议你看看这些。此外,还有更多的权重更新算法,而不仅仅是普通的老式后备程序。 Levenberg-Marquardt Algorithm可能值得一试。假设你不是自己写的,你的实现可能已经有了。

早期停止的某种形式也可能有用。

您没有提及您是否尝试分类或回归。如果您正在进行分类,请确保输出节点上的激活功能与您正在使用的类标签类型相匹配。 Logsig的范围是0到1,而Tansig的范围是-1到1.如果您正在进行回归,请确保输出具有线性激活,或者至少可能的输出范围与您的训练示例相匹配。

+0

润通信息存在的。 PCA似乎降低了一些例子的特征数量。这是分类。我在matlab中使用fmincg,我相信它具有自适应学习速率。我确实规范了它。 – cubearth

0

如果您正在进行分类,问题可能出现在您的标签中。

我在用Octave训练神经网络时遇到了类似的问题。准确度约为50%。我有两个标签0和1.我的准确度很低,因为八度音阶从1开始索引而不是0.您可能想要查看标签。

0

首先,分类的准确性取决于数据集。所有人工智能方法都试图在矢量空间中分离数据。但是,数据可能无法分开,有些情况下64%可能非常接近最佳结果。你使用的是什么样的数据集(它是众所周知的基准之一,还是你试图解决的某个特定问题?)

其次,权重变化并不一定意味着网络是正在训练。训练结束后,您不应检查权重是否改变,但如果总平方误差减小。如果它没有显着减少,您的网络可能根本没有受过培训。在你的情况下,如果训练后精度仍然保持50%(我想你说的是两级问题),但很可能这种方法根本不起作用。您应该首先尝试一个更简单的数据集,以检查它是否有效。

此外:

  • 9000的功能太多,如果你想培养一个多层感知。您可能需要SVM来解决这样一个复杂的问题。
  • 实例的数量,最有可能的,太小了这样的问题(但是,如果两个类之间的模式是太远的问题空间)