| -*- coding: utf-8 -*- | |||||
| """ |
| @author: Balaji |
| """ |
| print('\n 18 March Program for a simple neural network, doing a forward pass with one layer') |
| print('\n 21 March Added provision for data generation for use in training.') |
| print('\n 21 March Formating input data as a matrix for faster multiplication with weights') |
| print('\n 22 March Initialise bias to 0, weights to very small ~0.01 random numbers, put computations inside a class') |
|
|
| import numpy as np |
| import matplotlib.pyplot as plt |
|
|
| class Layer_dense(): |
| def __init__(self, num_pixels, num_neurons): |
| np.random.seed(1); #For repeatability |
| self.weights = np.random.randn(num_neurons ,num_pixels); |
| self.biases = np.random.randn(num_neurons ,1); |
| #self.output_beforeActivation = np.zeros((num_neurons,1)); |
| def forward(self, inputs): |
| self.output_beforeActivation = np.dot(self.weights,inputs)+self.biases; |
| def applyReluActivation (self): |
| self.output_afterActivation = np.maximum(0,self.output_beforeActivation); |
|
|
| num_neurons = 4; |
| num_pixels = 5; |
| num_images = 10; |
|
|
| # Input data set properties |
| slope = np.tan(np.deg2rad(30)); |
| intercept = 50; |
|
|
| print('\n Creating input data:') |
| np.random.seed(1); #For repeatability |
| inputs = np.zeros((num_pixels,num_images)); |
| x = np.arange(0,num_pixels); |
| x = x.reshape((num_pixels,1)); |
| for dataSet_iter in range(num_images): |
| inputs[:,dataSet_iter:dataSet_iter+1] = (slope*x+intercept) + (intercept*0.1)*(np.random.randn(x.size,1)); |
|
|
| print('\n Plotting input data set :') |
| plt.plot(x,inputs,'o') |
| plt.xlabel('Pixel number') |
| plt.ylabel('Pixel value') |
| plt.title('Input data set') |
| plt.legend() |
| plt.show() |
|
|
| print('\n Create a dense layer, fully connected, of the class Layer_dense') |
| firstLayer = Layer_dense(num_pixels = num_pixels, num_neurons = num_neurons); |
| firstLayer.forward(inputs=inputs); |
| firstLayer.applyReluActivation(); |
|
|
| print('\n Result = ') |
| print('\n Each column is result of the network per image, after activation') |
No comments:
Post a Comment