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'