import numpy as np class Perceptron(object): """Implements a perceptron network""" def __init__(self, input_size, lr=1, epochs=100): self.W = np.zeros(input_size+1) # add one for bias self.epochs = epochs self.lr = lr #activation function def activation_fn(self, x): #return (x >= 0).astype(np.float32) return 1 if x >= 0 else 0 #we need a prediction function to run an input through the perceptron and return an output. def predict(self, x): z = self.W.T.dot(x) a = self.activation_fn(z) return a def fit(self, X, d): for _ in range(self.epochs): for i in range(d.shape[0]): x = np.insert(X[i], 0, 1) y = self.predict(x) e = d[i] - y self.W = self.W + self.lr * e * x #the easiset set of data that we can provide is the AND gate. Given is set of inputs and outputs. if __name__ == '__main__': X = np.array([ [0, 0], [0, 1], [1, 0], [1, 1] ]) d = np.array([0, 0, 0, 1]) perceptron = Perceptron(input_size=2) perceptron.fit(X, d) print(perceptron.W)