首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby中异或运算的神经网络训练

Ruby中异或运算的神经网络训练
EN

Stack Overflow用户
提问于 2010-11-16 09:35:06
回答 2查看 2.1K关注 0票数 6

我正在尝试训练一个前馈网络来执行与Ruby库AI4R的异或操作。然而,当我在训练后对XOR进行评估时。我没有得到正确的输出。以前有没有人用过这个库来学习XOR运算。

我使用两个输入神经元,隐藏层中的三个神经元和一层作为输出,因为我之前看到了一个像这样的预计算XOR前馈神经网络。

代码语言:javascript
运行
复制
require "rubygems"
require "ai4r"

# Create the network with:
 #   2 inputs
 #   1 hidden layer with 3 neurons
 #   1 outputs
 net = Ai4r::NeuralNetwork::Backpropagation.new([2, 3, 1])  

 example = [[0,0],[0,1],[1,0],[1,1]]
 result = [[0],[1],[1],[0]]

 # Train the network
 400.times do |i|
   j = i % result.length
   puts net.train(example[j], result[j])
 end

 # Use it: Evaluate data with the trained network
puts "evaluate 0,0: #{net.eval([0,0])}"  # =>  evaluate 0,0: 0.507531383375123
puts "evaluate 0,1: #{net.eval([0,1])}"  # =>  evaluate 0,1: 0.491957823618629
puts "evaluate 1,0: #{net.eval([1,0])}"  # =>  evaluate 1,0: 0.516413912471401
puts "evaluate 1,1: #{net.eval([1,1])}"  # =>  evaluate 1,1: 0.500197884691668

泰德

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-16 10:34:05

你没有对它进行足够的迭代训练。如果您将400.times更改为8000.times,您将更接近(在20000.times中更接近)。

20000.times,我得到了

代码语言:javascript
运行
复制
puts "evaluate 0,0: #{net.eval([0,0])}"  # =>  evaluate 0,0: 0.030879848321403
puts "evaluate 0,1: #{net.eval([0,1])}"  # =>  evaluate 0,1: 0.97105714994505
puts "evaluate 1,0: #{net.eval([1,0])}"  # =>  evaluate 1,0: 0.965055940880282
puts "evaluate 1,1: #{net.eval([1,1])}"  # =>  evaluate 1,1: 0.0268317078331645

您还可以增加net.learning_rate (但不要太多)。

票数 5
EN

Stack Overflow用户

发布于 2016-05-28 23:55:04

如果你想考虑神经进化,你可以去看看neuroevo的gem。运行specs来查看它在15次迭代中的fit XOR ([2,2,1]前馈网络,XNES优化器):

https://github.com/giuse/neuroevo/blob/master/spec/solver_spec.rb

完全公开:我是开发人员(你好!)。

我最近刚刚开始发布我的代码,并正在寻求反馈。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4190455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档