6

Ruby Kitaplığı AI4R ile bir XOR işlemi gerçekleştirmek için çalışmaya yönelik bir ileri besleme ağı eğitmeye çalışıyorum. Ancak, eğitimden sonra XOR için değerlendirdiğimde . Doğru çıktı almıyorum. Bu kütüphaneyi 'dan önce kullanmış ve XOR işlemini öğrenmek için kullanmıştır.Ruby'de XOR için eğitim ağı eğitimi

İki girişli nöron, gizli bir katmandaki üç nöron ve çıkış için bir katman kullanıyorum, önceden böyle bir önceden hesaplanmış bir XOR besleme iletme nöral ağ gördüm.

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

Bu yanıtla ilgileniyorsanız: http://stackoverflow.com/a/38767930/5082406 –

cevap

5

Yeterince tekrarlamalar için eğitilmiş değil. 400.times'u 8000.times olarak değiştirirseniz, çok daha yakına gelirsiniz (ve 20000.times numaralı telefondan daha yakındır).

20000.times, ben

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 

Ayrıca artırabilir olsun net.learning_rate (ama çok fazla).

+0

Neden bu kadar yavaş olduğunu merak ediyorum. – Flethuseo

+1

Hmmm. ilginç .. En çok 4000 tekrarında denedim .. ve bu miktarda iyi bir geri yayılım çalışması görmüştüm. Çok fazla deneme yapmayı denemedim :). 1: – Flethuseo

+0

Bir öğrenme oranı ile biraz daha iyi çalıştığını fark ettim Sadece bir şey benzer bir şey ararsanız, burada Neural ağlar ve AI şeyler için örnekler bir grup bulundu: gems/ai4r-1.9/örnekler/ – Flethuseo

2

Neuroevolution'ı düşünmek isterseniz, neuroevo gemini kontrol edebilirsiniz. 15 tekrarlamalar ([2,2,1] ileri beslemeli ağ, XNES optimize edici) içinde XOR sığacak görmek için gözlük çalıştırın:

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

Tam açıklanmasını: Ben geliştirici değilim (hi orada!).
Kısa bir süre önce kodumu yayınlamaya başladım ve geri bildirim arıyorum.