4

我正在尝试使用神经网络来解决问题。我从 Coursera 上提供的机器学习课程中了解到它们,并且很高兴地发现 FANN 是神经网络的 Ruby 实现,因此我不必重新发明飞机。

但是,我真的不明白为什么 FANN 会给我这样奇怪的输出。根据我在课堂上学到的知识,

我有一组匹配结果的训练数据。给玩家一个数字,给他们的对手一个数字,结果是 1 为赢,0 为输。由于不安,数据有点嘈杂,但并非如此。我的目标是找出哪些评分差距更容易引起不安——例如,我的直觉告诉我,评分较低的比赛往往会带来更多的不安,因为评分不太准确。

所以我得到了一个包含大约 100 个示例的训练集。每个示例都是(评级,增量)=> 1/0。所以这是一个分类问题,但我认为它并不适合逻辑回归类型的图表,神经网络似乎更正确。

我的代码开始

training_data = RubyFann::TrainData.new(:inputs => inputs, :desired_outputs => outputs)

然后我用

network = RubyFann::Standard.new(
  :num_inputs=>2, 
  :hidden_neurons=>[8, 8, 8, 8], 
  :num_outputs=>1)

在课堂上,我了解到一个合理的默认设置是让每个隐藏层具有相同数量的单元。由于我真的不知道如何工作或我正在做什么,所以我选择了默认设置。

network.train_on_data(training_data, 1000, 1, 0.15)

最后,我以增量方式检查了一组样本输入评级,并且在每次增量时,增加 delta 直到结果从 > 0.5 切换到 < 0.5,我认为它是大约 0 和大约 1,尽管实际上它们是更像是 0.45 和 0.55。

当我运行一次时,每个输入都给了我 0。我用相同的数据再次运行了两次,得到了负数的减少趋势和正数的增加趋势,与预测完全相反。

我想也许我没有包含足够的功能,所以我添加了 (rating**2delta**2)。不幸的是,然后我开始为每次输入获取我的起始增量或最大增量。

我真的不明白为什么我会得到如此不同的结果或 Ruby-FANN 告诉我什么,部分原因是我不了解库,但我怀疑,因为我刚刚开始学习神经网络并且遗漏了一些东西大而明显。我是否没有足够的训练数据,是否需要包含更多功能,问题是什么,我该如何解决它或学习如何做得更好?

4

1 回答 1

1

玩一点参数怎么样?起初我强烈推荐只有两层......应该有数学证明它足以解决许多问题。如果你有太多的神经元,你的 NN 将没有足够的时期来真正学习一些东西..所以你也可以玩一些时期以及 gama ..我认为在你的情况下它是 0.15 ..如果你使用更大一点值你的 NN 应该学得快一点(不要害怕尝试 0.3 甚至 0.7),正确的 gama 值通常取决于权重的间隔或输入标准化。

您的 NN 显示出如此不同的结果很可能是因为在每次运行中都有新的初始化,然后有完全不同的网络,它将以与前一个不同的方式学习(不同的权重将具有更高的值,因此 NN 的不同部分将学习相同事物)。

我对这个库不熟悉,我只是在写一些 NN 的经验。希望这些东西会有所帮助..

于 2012-10-09T08:55:02.373 回答