Python ile XOR Problemi Çözümü

XOR problemi, iki girişli bir lojik kapı işlevi olan XOR işleminin doğru bir şekilde öğrenilememesi sorunudur. XOR işlemi, iki girişten birinin 1 olması durumunda çıktının 1, diğer tarafta çıktının 0 olması durumunu ifade eder.

Bu işlemi gerçekleştiren bir yapay sinir ağı öğrenildiğinde, eğitim verilerine göre çıktıları doğru bir şekilde verir ancak eğitim verileri dışındaki girdilerde hatalı sonuçlar verebilir. Bu nedenle XOR problemi, yapay sinir ağları için önemli bir test oluşturur ve çözülmesi zor bir problem olarak kabul edilir.

Daha önceki makalelerde bu problemin ne olduğu ve Matlab'da nasıl kodlandığını yazmıştım. Bu makalede çok katmanlı perceptron kullanarak XOR problemini çözmek için Python'da yazabileceğiniz bir kod örneği verilmiştir:

import numpy as np

class NeuralNetwork:
    def __init__(self, x, y):
        self.input = x
        self.weights1 = np.random.rand(self.input.shape[1],4)
        self.weights2 = np.random.rand(4,1)
        self.y = y
        self.output = np.zeros(self.y.shape)

    def feedforward(self):
        self.layer1 = self.sigmoid(np.dot(self.input, self.weights1))
        self.output = self.sigmoid(np.dot(self.layer1, self.weights2))

    def backprop(self):
        d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * self.sigmoid_derivative(self.output)))
        d_weights1 = np.dot(self.input.T,  (np.dot(2*(self.y - self.output) * self.sigmoid_derivative(self.output), self.weights2.T) * self.sigmoid_derivative(self.layer1)))

        self.weights1 += d_weights1
        self.weights2 += d_weights2

    def sigmoid(self, x):
        return 1/(1+np.exp(-x))

    def sigmoid_derivative(self, x):
        return x*(1-x)

if __name__ == "__main__":
    X = np.array([[0,0],[0,1],[1,0],[1,1]])
    y = np.array([[0],[1],[1],[0]])
    nn = NeuralNetwork(X,y)

    for i in range(1500):
        nn.feedforward()
        nn.backprop()

    print(nn.output)

Yukarıdaki kodda, bir NeuralNetwork sınıfı tanımlanır. Bu sınıf, input (X) ve y (beklenen çıktı) verilerini alır ve ardından ilk önce weights1 ve weights2 olarak adlandırılan ağırlık matrislerini rastgele bir değerlerle başlatır. feedforward() metodu, ağın ileri yönlü hesaplamasını yapar ve backprop() metodu, geri yayılım algoritması kullanarak ağırlık matrislerini günceller. Bu iki metod arasındaki işlemler iterasyonlar halinde gerçekleştirilir.

sigmoid() fonksiyonu, aktivasyon fonksiyonu olarak kullanılır ve sigmoid_derivative() fonksiyonu, sigmoid fonksiyonunun türevini hesaplamak için kullanılır.

Ana programda, XOR problemini çözmek için X ve y verileri oluşturulur ve ardından NeuralNetwork sınıfından bir nesne oluşturulur. Daha sonra, ağın öğrenmesi için 1500 iterasyon gerçekleştirilir ve sonuç olarak ağın çıktısı ekrana yazdırılır.

python, 'python ysa', 'python ile yapay sinir ağları','xor problemi','xor probleminin ysa ile çözümü', 'xor gate yapay sinir ağları', 'python ile çok katmanlı perceptron', 'çok katmanlı perceptron ile xor problemi çözümü',  'yapay sinir ağları ile xor çözümü', 'matlab xor problemi', ''python yapay sinir ağı örneği', 'python yapay sinir ağı çok katmanlı perceptron'

Bilgilendirme

www.aliosmangokcan.com sayfasına gösterdiğiniz ilgiden dolayı teşekkür ederim. İçeriklerle ilgili duygu ve düşüncelerinizi mail adresim üzerinden iletebilirsiniz...

 

İstatistikler

  • Kullanıcılar 1
  • Makaleler 111
  • Makale Görüntüleme 787779