运维开发网

ruby-on-rails – 无法理解神经网络

运维开发网 https://www.qedev.com 2020-07-19 19:44 出处:网络 作者:运维开发网整理
我正在尝试使用神经网络来解决问题.我从Coursera上提供的机器学习课程中了解到它们,并很高兴地发现FANN是神经网络的 Ruby实现,所以我没有必要重新发明飞机. 但是,我真的不明白为什么FANN给我这么奇怪的输出.根据我从课堂上学到的知识, 我有一组匹配结果的训练数据.给予玩家一个数字,给他们的对手一个数字,结果是1为赢,0为亏.由于心烦意乱,数据有点嘈杂,但并非如此.我的目标是找出哪些评级
我正在尝试使用神经网络来解决问题.我从Coursera上提供的机器学习课程中了解到它们,并很高兴地发现FANN是神经网络的 Ruby实现,所以我没有必要重新发明飞机.

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

我有一组匹配结果的训练数据.给予玩家一个数字,给他们的对手一个数字,结果是1为赢,0为亏.由于心烦意乱,数据有点嘈杂,但并非如此.我的目标是找出哪些评级差距更容易受到干扰 – 例如,我的直觉告诉我,评级较低的匹配往往会导致更多的不安,因为评级不太准确.

所以我得到了大约100个例子的训练集.每个例子是(评级,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.我使用相同的数据再次运行两次,并且负数的下降趋势和正数的增加趋势,完全相反的预测. 我想也许我没有包含足够的功能,所以我添加了(评级** 2和delta ** 2).不幸的是,我每次都开始获得每个输入的起始增量或最大增量. 我真的不明白为什么我会得到如此不同的结果或Ruby-FANN告诉我的,部分是因为我不理解图书馆而且我怀疑,因为我刚开始学习神经网络并且遗漏了某些东西大而明显.我没有足够的培训数据,是否需要包含更多功能,问题是什么?如何修复或学习如何做得更好?

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

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

我不熟悉这个库我只是在写NN的一些经验.希望这些东西能帮助..

0

精彩评论

暂无评论...
验证码 换一张
取 消