6

Estoy tratando de entrenar una red de feedforward para que trabaje para realizar operaciones XOR con Ruby Library AI4R. Sin embargo, cuando evalúo el XOR después de entrenarlo. No estoy obteniendo el resultado correcto. Alguien ha usado esta biblioteca antes del y la ha obtenido para conocer la operación XOR.Red neuronal de entrenamiento para XOR en Ruby

Estoy utilizando dos neuronas de entrada, tres neuronas en una capa oculta, y una capa para la salida, ya que vi una red neuronal precomputada XOR como antes.

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 

Ted

+0

puede que le interese esta respuesta: http://stackoverflow.com/a/38767930/5082406 –

Respuesta

5

No ha entrenado por suficientes iteraciones. Si cambia 400.times a 8000.times, llegará mucho más cerca (y aún más cerca de 20000.times).

En 20000.times, me sale

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 

También puede aumentar net.learning_rate (pero no demasiado).

+0

Me pregunto por qué es tan lento. – Flethuseo

+1

Hmmm. interesante ... He intentado como mucho 4.000 iteraciones ... y he visto una propagación inversa que funciona bastante bien con esa cantidad. No me molesté en probar tantas iteraciones :). Noté que funciona un poco mejor con una tasa de aprendizaje de 1. – Flethuseo

+0

Solo en caso de que alguien busque algo similar, encontré un montón de ejemplos de redes neuronales y cosas de AI aquí: gems/ai4r-1.9/examples/ – Flethuseo

2

Si desea considerar Neuroevolution, puede consultar la gema neuroevo. Ejecutar las especificaciones para ver que encaja XOR en 15 iteraciones (red [2,2,1] de alimentación hacia adelante, XNES optimizador):

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

La revelación completa: Soy el desarrollador (¡Hola!).
Recientemente comencé a publicar mi código y estoy buscando comentarios.

Cuestiones relacionadas