2010-05-23 90 views
7

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

输入数据由一系列整数组成,可以按照用户想要去的那样高,但大多数会低于100,000我会想到的。有些将低至1.它们的详细信息包括项目中的人员数量和项目成本,以及有关数据库实体和用例的详细信息。

总共有10个输入和2个输出(时间和成本)。我正在使用Resilient Propagation来训练网络。目前它具有:10个输入节点,1个隐藏层,5个节点和2个输出节点。我正在接受5%的错误率训练。

该算法必须在网络服务器上运行,所以我已经采取措施停止培训,看起来它不会在任何地方。这被设置为10,000次训练迭代。目前,当我尝试使用一些有点多变的数据进行训练时,但在我们预期用户投入的范围内时,训练需要很长时间,达到10,000次迭代限制并重新开始。

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

谢谢!

回答

10

首先,感谢您提供有关您的网络的如此多的信息!这里有几点应该给你一个更清晰的画面。

  • 您需要规范化您的输入。如果一个节点的平均值为100,000而另一个节点的平均值为0.5,则两个输入不会产生相同的影响。这就是为什么你需要规范化他们。
  • 10个输入节点只有5个隐藏的神经元?我记得在某处读到你需要的输入数量至少增加一倍;尝试20 +隐藏的神经元。这将为您的神经网络模型提供开发更复杂模型的能力。但是,太多神经元和您的网络只会记住训练数据集。
  • 弹性反向传播很好。只要记住,还有像Levenberg-Marquardt那样的其他训练算法。
  • 你有多少套训练套装?神经网络通常需要大型数据集才能做出有用的预测。
  • 考虑将动量因子添加到您的重量训练算法中,以加快速度,如果您还没有这样做。
  • 在线培训比分批培训更容易进行广义预测。前者在通过网络运行每个训练集后更新权重,后者在传递每个数据集后更新网络。这是你的电话。
  • 您的数据是离散的还是连续的?神经网络比连续函数更适合于01。如果是前者,我建议使用sigmoid激活功能。对隐藏层和输出层的激活功能的组合tanhlinear倾向于在连续变化的数据方面做得很好。
  • 你需要另一个隐藏层吗?如果您的网络正在处理复杂的输入输出表面映射,它可能会有所帮助。
+0

感谢您的所有信息! 1.我想过对输入进行归一化处理,但是当一个数值没有最大值并且某些数值可能差别很大时我不知道该怎么做。 2.我尝试了20个隐藏的神经元,它需要5个多小时而不是几秒钟的数据。好像超过10个并不好。 4.数据集的数量取决于用户投入的数量。我们一直在使用5个左右。 5.我们使用一个名为Encog的神经网络框架,我将研究改变势头,但我不知道如果可能。 – danpalmer 2010-05-23 20:42:19

+0

6.同样,我不知道框架如何处理在线培训,我会研究这一点。 7.数据是连续的,我已经设置了线性激活,因为我会想象结果应该如何随输出而变化。 8.和第2点一样,我发现有2层的时候,它实现了我强加的限制,并且运行时间更长。 – danpalmer 2010-05-23 20:44:26

+0

大声笑。我也应该上床,明天上大学。我已经添加了一些标准化。它不是很好,但所有数据集的值都在0到1之间,预测也不会那么高。一方面,我的训练速度提高了18000%。我会继续测试并尝试实施其他一些措施,但现在它是一个很好的结果。非常感谢您的帮助! – danpalmer 2010-05-23 21:48:36