Тренинг нейронной сети для XOR в Ruby - PullRequest
6 голосов
/ 16 ноября 2010

Я пытаюсь настроить сеть с прямой связью для работы для выполнения операций XOR с Ruby Library AI4R.Однако, когда я оцениваю XOR после тренировки.Я не получаю правильный вывод.Кто-нибудь использовал эту библиотеку раньше и получил ее для изучения операции XOR.

Я использую два входных нейрона, три нейрона в скрытом слое и один слой для вывода, поскольку я видел предварительно вычисленную нейронную сеть с прямой связью XOR, как это раньше.Тед

Ответы [ 2 ]

5 голосов
/ 16 ноября 2010

Вы не обучили его достаточно итерациям. Если вы измените 400.times на 8000.times, вы станете намного ближе (и еще ближе к 20000.times).

При 20000.times я получаю

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 (но не слишком сильно).

2 голосов
/ 28 мая 2016

Если вы хотите рассмотреть Neuroevolution, вы можете проверить драгоценный камень neuroevo.Запустите спецификации, чтобы увидеть, как оно соответствует XOR за 15 итераций ([2,2,1] сеть прямой связи, XNES оптимизатор):

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

Полное раскрытиеЯ разработчик (привет!).
Я только недавно начал публиковать свой код и ищу обратную связь.

...