2016-11-01 13 views
5

Daniel Shiffman'ın XOR Neural Network'ü hızlı bir şekilde uygulamaya çalışıyorum, tüm parçalara sahibim, ancak eğitimden sonra sonuçlar beklenmedik.XOR Neural Network - beklenmedik sonuçlar

Bir parçam, birden fazla şeyi bir kerede öğrenmeye çalışan gerçek eğitim sistemi olduğunu düşünüyor. https://www.dropbox.com/s/9rv8ku3d62h03ip/Neural.playground.zip?dl=0

Daniels kodu:

Results Screenshot

yanlış bir şey tespit edebilirsiniz durumda herkes benim oyun alanı bağladınız kodunda hataların bir çift vardır

https://github.com/shiffman/The-Nature-of-Code-Examples/blob/master/chp10_nn/xor/code/src/Network.java

+0

kaç gizli katman düğümleri sizinle ağı oluşturuyorsunuz? En az 3 düğüme sahip olduğunuzda 1 gizli katmanı olan XOR'un çok daha iyi çalıştığını fark ettim. – Simon

+0

4 düğümle birlikte 1 gizli katmanım var – Chris

+0

'Bağlantı 'başlatılırken,' weight 'özelliğine aralıkta rastgele bir değer verirsiniz '[0, 1]', ancak ağırlıklar '[-1, 1]' aralığında olmalıdır. 'Self.weight = 2 * we-1' ''' '' '' '' '' '' '' '' '' '' '' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' '=' 'satırını değiştirmeyi deneyin. – dfri

cevap

1

. İlk (ve en önemlisi), ağlarınızı oluşturma şeklinizdeki bir inceliktir. 2 girişi için (: Şu anda sen

inputs = [Neuron](repeating: Neuron(), count:2+1) 
hidden = [Neuron](repeating: Neuron(), count:4+1) 

kullandığınız Ama bu da aynı Neuron ve aynı Neuron tüm hidden ile tüm girişler oluşturur, bu yüzden sadece 4 Neuron ler vardır

düzenli 2 kez tekrarlanan ve bir önyargı nöron) ve 2 gizli için (düzenli tekrar 4 kez ve 1 önyargı için).

Sadece döngü için kullanarak bunu çözebilir: Bir Neuron çıktısı bunu (bias = from.output*c.weight) değiştirmek yerine önyargı ekliyoruz hesaplarken

public class Network 
{ 
    var inputs:[Neuron] = [] 
    var hidden:[Neuron] = [] 
    var output:Neuron! 

    public init() 
    { 
     for _ in 1...2 { 
      inputs.append(Neuron()) 
     } 

     for _ in 1...4 { 
      hidden.append(Neuron()) 
     } 

     //print("inputs length: \(inputs.count)") 

     inputs.append(Neuron(bias: true)) 
     hidden.append(Neuron(bias: true)) 

     output = Neuron() 

     setupInputHidden() 
     setupHiddenOutput() 
    } 

    ... 
} 

diğer (minör) şeydir, ben Bunun amaca uygun olup olmadığını bilmiyorum ama sonuç etkilenmemiş gibi görünüyor.

Trained network

+1

ah! "Tekrar eden:" aynı ilk argümanı kullanmanın hiçbir fikrim yoktu: -/Sorunumu açıklığa kavuşturmak ve çözmek için çok teşekkür ederim. Stackoverflow bana izin verdiğinde puanları ödüllendireceğim. – Chris