Вы не обучили его достаточно итерациям. Если вы измените 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
(но не слишком сильно).