In [15]:
import numpy as np
# Based on Siraj's NN.
class NeuralNetwork():
def __init__(self):
np.random.seed(1)
self.weights = 2 * np.random.random((3,1)) - 1
def __sigmoid(self, x):
return 1/(1 + np.exp(-x))
def __sigmoid_derivative(self, x):
return x * (1 - x)
def train(self, training_set, training_labels, num_iterations):
for i in range(num_iterations):
predictions = self.predict(training_set)
error = training_labels - predictions
adjustments = np.dot(training_set.T, error * self.__sigmoid_derivative(predictions))
self.weights += adjustments
def predict(self, inputs):
return self.__sigmoid(np.dot(inputs, self.weights))
nn = NeuralNetwork()
print('Random weight initializations:')
print(nn.weights)
training_set = np.array([
[0,0,1],
[1,1,1],
[1,0,1],
[0,1,1]
])
training_labels = np.array([
[
0,
1,
1,
0
]
]).T
nn.train(training_set, training_labels, num_iterations=10000)
print('Trained weights:')
print(nn.weights)
print('Prediction test:')
prediction = nn.predict(np.array([1,0,0]))
print(prediction, '-->', int(np.rint(prediction)[0]))