Created
January 2, 2024 21:34
-
-
Save Winand/b2e5689117e6e27ccf1a9acab10073c7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
class NeuralNetwork(): | |
def __init__(self): | |
# seeding for random number generation | |
np.random.seed(1) | |
#converting weights to a 3 by 1 matrix with values from -1 to 1 and mean of 0 | |
self.synaptic_weights = 2 * np.random.random((3, 1)) - 1 | |
def sigmoid(self, x): | |
#applying the sigmoid function | |
return 1 / (1 + np.exp(-x)) | |
def sigmoid_derivative(self, x): | |
#computing derivative to the Sigmoid function | |
return x * (1 - x) | |
def train(self, training_inputs, training_outputs, training_iterations): | |
#training the model to make accurate predictions while adjusting weights continually | |
for iteration in range(training_iterations): | |
#siphon the training data via the neuron | |
output = self.think(training_inputs) | |
#computing error rate for back-propagation | |
error = training_outputs - output | |
#performing weight adjustments | |
adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output)) | |
self.synaptic_weights += adjustments | |
def think(self, inputs): | |
#passing the inputs via the neuron to get output | |
#converting values to floats | |
inputs = inputs.astype(float) | |
output = self.sigmoid(np.dot(inputs, self.synaptic_weights)) | |
return output | |
if __name__ == "__main__": | |
#initializing the neuron class | |
neural_network = NeuralNetwork() | |
print("Beginning Randomly Generated Weights: ") | |
print(neural_network.synaptic_weights) | |
#training data consisting of 4 examples--3 input values and 1 output | |
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 | |
#training taking place | |
neural_network.train(training_inputs, training_outputs, 30000) | |
print("Ending Weights After Training: ") | |
print(neural_network.synaptic_weights) | |
user_input_one, user_input_two, user_input_three = str(input("User Input: ")) | |
print("Considering New Situation: ", user_input_one, user_input_two, user_input_three) | |
print("New Output data: ") | |
print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three]))) | |
print("Wow, we did it!") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment