gpt4 book ai didi

ruby-on-rails - 难以理解神经网络

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:15 25 4
gpt4 key购买 nike

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

但是,我不太明白为什么 FANN 会给我如此奇怪的输出。根据我从类里面学到的知识,

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

所以我得到了大约 100 个示例的训练集。每个示例都是 (rating, delta) => 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)

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

当我运行一次时,每次输入都返回 0。我用相同的数据再次运行了两次,得到负数下降趋势和正数上升趋势,完全相反的预测。

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

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

最佳答案

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

你的 NN 显示如此不同的结果很可能是因为在每次运行中都有新的初始化然后有完全不同的网络并且它将以与前一个不同的方式学习(不同的权重将具有更高的值所以 NN 的不同部分会学到同样的东西)。

我不熟悉这个库,我只是写一些使用 NN 的经验。希望这些能有所帮助..

关于ruby-on-rails - 难以理解神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com