6

Tôi đang cố gắng đào tạo mạng feedforward để làm việc để thực hiện các thao tác XOR với Thư viện Ruby AI4R. Tuy nhiên, khi tôi đánh giá cho XOR sau khi đào tạo nó. Tôi không nhận được kết quả chính xác. Có ai đã sử dụng thư viện này trước và nhận nó để tìm hiểu hoạt động XOR.Mạng neural đào tạo cho XOR trong Ruby

Tôi đang sử dụng hai nơ-ron đầu vào, ba nơ-ron trong một lớp ẩn và một lớp cho đầu ra, như tôi đã thấy một mạng nơ-ron chuyển tiếp trước đây như trước đây.

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

bạn có thể quan tâm đến câu trả lời này: http://stackoverflow.com/a/38767930/5082406 –

Trả lời

5

Bạn chưa được đào tạo nó cho đủ lặp. Nếu bạn thay đổi 400.times thành 8000.times bạn sẽ đến gần hơn (và gần hơn nữa vẫn ở 20000.times).

Tại 20000.times, tôi nhận được

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 

Bạn cũng có thể tăng net.learning_rate (nhưng không quá nhiều).

+0

Tôi tự hỏi tại sao nó quá chậm. – Flethuseo

+1

Hmmm. thú vị .. Tôi đã thử nhiều nhất 4000 lần lặp lại .. và tôi đã thấy một công việc tuyên truyền trở lại khá tốt với số tiền đó. Tôi không bận tâm để thử nhiều lần lặp lại :). Tôi nhận thấy rằng nó hoạt động tốt hơn một chút với tỷ lệ học tập 1. – Flethuseo

+0

Chỉ trong trường hợp ai đó tìm kiếm nội dung tương tự, tôi đã tìm thấy một loạt ví dụ cho mạng Neural và công cụ AI tại đây: gems/ai4r-1.9/examples/ – Flethuseo

2

Nếu bạn muốn xem xét Neuroevolution, bạn có thể kiểm tra đá quý neuroevo. Chạy số kỹ thuật để xem nó phù hợp XOR trong 15 lần lặp ([2,2,1] feed-forward mạng, XNES ưu):

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

tiết lộ đầy đủ: Tôi đang phát triển (hi there!).
Tôi vừa mới bắt đầu xuất bản mã của mình và đang tìm kiếm phản hồi.

Các vấn đề liên quan