neural network in python without using any external library
all is implemented manually
i am just creating my first neural network library
-
NeuralNetwork
- The neural network classpredict(input_array)
- Returns the output of a neural networktrain(input_array, target_array)
- Trains a neural networksetLearningRate(learning_rate)
- setting the learning ratesetActivationFunction(func)
- setting the activation function
-
Matrix
- The matrix classsubtract(a, b)
- return a matrix result from subtracting 2 matrix objectsadd(n)
- add return sum of 2 matrix objectsmultiplyMatrix(a, b)
- return a matrix result from multiplying to matrix objectsmap(func)
- Apply a function to every element of matrixSmap(matrix, func)
- static version of mapmultiply(n)
- result a Hadamard product or scalar productfromArray(arr)
- convert array to matrixtoArray
- convert matrix to arraytranspose(matrix)
- This makes the columns of the new matrix the rows of the originalrandomize(dtype=float)
- randomize all matrix elementslog
- print matrix data
matrix is a numpy like library
from NeuralNetwork.matrix import Matrix
# create instance of matrix with 2 rows and 3 columns
m1 = Matrix(2, 3)
# Show Data
print(m1.data)
# [[0, 0, 0], [0, 0, 0]]
# Randomize values of m1 (Matrix)
m1.randomize(dtype=float)
print(m1.data)
# [[-0.26396268483049146, 0.3837936231559904, -0.9863464021672874], [-0.6479179674474989, 0.26713230080347317, 0.061410519618629644]]
m1.randomize(dtype=int)
print(m1.data)
# [[6, 5, 9], [2, 4, 7]]
# Change rows and cols manually
m1.data[0][1] = 0
print(m1.data)
# [[6, 0, 9], [2, 4, 7]]
Matrix Methods
from NeuralNetwork.matrix import Matrix
# create 2 matrix object
m1 = Matrix(2, 3)
m2 = Matrix(3, 2)
# Randomize values
m1.randomize(dtype=int)
m2.randomize(dtype=int)
print(m1.data)
# [[8, 3, 9], [7, 6, 6]]
print(m2.data)
# [[2, 8], [6, 2], [1, 0]]
# Transpose
m3 = Matrix.transpose(m2)
print(m3.data)
# [[2, 6, 1], [8, 2, 0]]
# Matrix multiplication
m4 = Matrix.multiplyMatrix(m1, m2)
print(m4.data)
# [[43, 70], [56, 68]]
from NeuralNetwork.nn import NeuralNetwork
nn = NeuralNetwork(2, 2, 1, learning_rate=0.1)
inputs = [1, 0]
output = nn.predict(inputs)
print(output)
you can train it and feedforward it
from NeuralNetwork.nn import NeuralNetwork
# Input nodes, Hidden nodes, Output nodes, learning_rate
nn = NeuralNetwork(2, 2, 1, learning_rate=0.1)
inputs = [1, 0]
targets = [1]
# Train the neural network
nn.train(inputs, targets)
outputs = nn.predict(inputs)
print(outputs)
# [0.30405332078202085] # it will show you something like that
you can load the data from json file
from NeuralNetwork.nn import NeuralNetwork
nn = NeuralNetwork(2, 2, 1, learning_rate=0.1)
training_data = [
{
'inputs': [0, 1],
'targets': [1],
},
{
'inputs': [1, 0],
'targets': [1],
},
{
'inputs': [0, 0],
'targets': [0],
},
{
'inputs': [1, 1],
'targets': [0],
},
]
for i in range(1000):
for data in range(len(training_data)):
nn.train(training_data[data].get('inputs'), training_data[data].get('targets'))
print(nn.predict([1, 0]))
print(nn.predict([0, 1]))
print(nn.predict([0, 0]))
print(nn.predict([1, 1]))
Now you can see the result
GPL3