|
|
- 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)
|