7

我正在创建一个工具,用于根据过去的数据预测软件项目的时间和成本。该工具使用神经网络来做到这一点,到目前为止,结果很有希望,但我认为我可以通过改变网络的属性来做更多的优化。在这些设置方面似乎没有任何规则甚至许多最佳实践,所以如果有经验的人可以帮助我,我将不胜感激。

输入数据由一系列整数组成,这些整数可以随用户的需要而上升,但我原以为大多数会低于 100,000。有些会低至 1。它们是项目中的人数和项目成本等详细信息,以及有关数据库实体和用例的详细信息。

总共有 10 个输入和 2 个输出(时间和成本)。我正在使用弹性传播来训练网络。目前它有:10 个输入节点、1 个带有 5 个节点的隐藏层和 2 个输出节点。我正在训练将错误率控制在 5% 以下。

该算法必须在网络服务器上运行,因此我采取了一种措施,当它看起来无处可去时停止训练。这设置为 10,000 次训练迭代。

目前,当我尝试使用一些不同的数据来训练它时,但在我们期望用户投入的范围内,训练需要很长时间,一遍又一遍地达到 10,000 次迭代限制。

这是我第一次使用神经网络,我真的不知道会发生什么。如果你能给我一些关于我应该为网络和迭代限制使用什么样的设置的提示,我将不胜感激。

谢谢!

4

1 回答 1

10

首先,感谢您提供有关您的网络的大量信息!这里有一些建议可以让您更清楚地了解情况。

  • 您需要标准化您的输入。如果一个节点的平均值为 100,000,而另一个节点的平均值仅为 0.5,您将不会看到两个输入的同等影响。这就是为什么你需要对它们进行标准化。
  • 10 个输入节点只有 5 个隐藏神经元?我记得在某处读到您至少需要双倍的输入;尝试 20 多个隐藏的神经元。这将为您的神经网络模型提供开发更复杂模型的能力。然而,太多的神经元和你的网络只会记住训练数据集。
  • 弹性反向传播很好。请记住,还有其他训练算法,例如 Levenberg-Marquardt。
  • 你有多少个训练集?神经网络通常需要大型数据集才能擅长做出有用的预测。
  • 如果您还没有这样做,请考虑在您的重量训练算法中添加动量因子以加快速度。
  • 在线训练往往比批量训练更适合进行广义预测。前者在通过网络运行每个训练集后更新权重,而后者在通过每个数据集后更新网络。这是你的电话。
  • 您的数据是离散的还是连续的?与连续函数相比,神经网络在处理0s 和s时往往做得更好。1如果是前者,我建议使用 sigmoid 激活函数。隐藏层和输出层的组合tanhlinear激活函数往往可以很好地处理不断变化的数据。
  • 你需要另一个隐藏层吗?如果您的网络正在处理复杂的输入输出表面映射,这可能会有所帮助。
于 2010-05-23T20:34:30.363 回答