| 
						
						
						
					 | 
				
				 | 
				
					@ -0,0 +1,41 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					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) |