#!/usr/bin/python3
# ==================================================================
# Create a Simple Neural Network in Python from Scratch
# From: www.youtube.com/watch?v=kft1AJ9WVDk
# See Diagram: neural_network_1.png
# ------------------------------------------------------------------
# Part 2: www.youtube.com/watch?v=Py4xvZx-A1E
# ==================================================================
import numpy as np
# ---- normalizing function
def sigmoid(x):
return 1 /( 1 + np.exp(-x))
# ---- deritivarive function
def sigmoid_derivatives(x):
return x + (1-x)
# ---- training matrix data
training_inputs = np.array([[0,0,1],
[1,1,1],
[1,0,1],
[0,1,1]])
training_outputs = np.array([[0,1,1,0]]).T
# ---- seed the random number generator so the results
# ---- can be repeated (for testing, etc)
np.random.seed(1)
# ---- create random starting synaptic weights
synaptic_weights = 2 * np.random.random((3,1)) - 1
print('-------------------------------------------')
print('Random starting synaptic weights:')
print(synaptic_weights)
# ---- main loop
# ---- increate iteration to improve accuracy (100000?)
for iteration in range(20000):
input_layer = training_inputs
outputs = sigmoid(np.dot(input_layer,synaptic_weights))
# ---- adjust sigmoid weights
error = training_outputs - outputs
adjustments = error * sigmoid_derivatives(outputs)
synaptic_weights += np.dot(input_layer.T,adjustments)
print('Synaptic weights after training:')
print(synaptic_weights)
print('-------------------------------------------')
print('Actual output values:')
print(training_outputs)
print('Outputs after training:')
print(outputs)