From 8ae8bb00d01801e6a7c13984a103b0d2d1fb041a Mon Sep 17 00:00:00 2001 From: Caio Cordeiro Date: Fri, 30 Sep 2022 15:45:08 -0300 Subject: [PATCH 1/7] feat: add simple foward propagation implementation --- neural_network/simple_neural_network.py | 53 +++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 neural_network/simple_neural_network.py diff --git a/neural_network/simple_neural_network.py b/neural_network/simple_neural_network.py new file mode 100644 index 000000000000..973c7ac40e44 --- /dev/null +++ b/neural_network/simple_neural_network.py @@ -0,0 +1,53 @@ +""" +Forward propagation explanation: +https://towardsdatascience.com/forward-propagation-in-neural-networks-simplified-math-and-code-version-bbcfef6f9250 +""" + +import random as ran +import math + + +# Sigmoid +def sigmoid_function(value: float, deriv: bool = False) -> float: + """Return the sigmoid function of a float. + + >>> sigmoid_function(3.5) + 0.9706877692486436 + >>> sigmoid_function(3.5, True) + -8.75 + """ + if deriv: + return value * (1 - value) + return 1 / (1 + math.exp(-value)) + + +# Initial Value +INITIAL_VALUE = 0.02 + +# Output +expected = int(input("What is the expected value? (1-100): ")) + +expected = expected / 100 + +# Number of propagations +n = int(input("How many propagations?: ")) + +# Random weight +syn0 = 2 * (ran.randint(1, 34)) - 1 + +for _ in range(n): + + # Forward propagation + layer_1 = sigmoid_function((INITIAL_VALUE * syn0)) + + # How much did we miss? + layer_1_error = expected - layer_1 + + # Error delta + layer_1_delta = layer_1_error * sigmoid_function(layer_1, True) + + # Update weight + syn0 += INITIAL_VALUE * layer_1_delta + +print("Output after training:") +print(layer_1 * 100) From 2da395111021fd6c346c3984984d88bbb0282099 Mon Sep 17 00:00:00 2001 From: Caio Cordeiro Date: Fri, 30 Sep 2022 18:40:19 -0300 Subject: [PATCH 2/7] fix: add PR requested changes --- neural_network/simple_neural_network.py | 49 +++++++++++++------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/neural_network/simple_neural_network.py b/neural_network/simple_neural_network.py index 973c7ac40e44..55c3ec3bf81b 100644 --- a/neural_network/simple_neural_network.py +++ b/neural_network/simple_neural_network.py @@ -24,30 +24,31 @@ def sigmoid_function(value: float, deriv: bool = False) -> float: # Initial Value INITIAL_VALUE = 0.02 -# Output -expected = int(input("What is the expected value? (1-100): ")) -expected = expected / 100 +def forward_propagation(expected: int, number_propagations: int) -> float: + """Return the value found after the forward propagation training. -# Number of propagations -n = int(input("How many propagations?: ")) + >>> res = forward_propagation(32, 10000000) + >>> res > 31 and res < 33 + True -# Random weight -syn0 = 2 * (ran.randint(1, 34)) - 1 - -for _ in range(n): - - # Forward propagation - layer_1 = sigmoid_function((INITIAL_VALUE * syn0)) - - # How much did we miss? - layer_1_error = expected - layer_1 - - # Error delta - layer_1_delta = layer_1_error * sigmoid_function(layer_1, True) - - # Update weight - syn0 += INITIAL_VALUE * layer_1_delta - -print("Output after training:") -print(layer_1 * 100) + >>> res = forward_propagation(32, 1000) + >>> res > 31 and res < 33 + False + """ + expected = expected / 100 + + # Random weight + weight = 2 * (ran.randint(1, 100)) - 1 + + for _ in range(number_propagations): + # Forward propagation + layer_1 = sigmoid_function((INITIAL_VALUE * weight)) + # How much did we miss? + layer_1_error = expected - layer_1 + # Error delta + layer_1_delta = layer_1_error * sigmoid_function(layer_1, True) + # Update weight + weight += INITIAL_VALUE * layer_1_delta + + return layer_1 * 100 From f63388650efb2369ea2912036816ec900e3af238 Mon Sep 17 00:00:00 2001 From: Caio Cordeiro Date: Fri, 30 Sep 2022 19:20:48 -0300 Subject: [PATCH 3/7] feat: add code example --- neural_network/simple_neural_network.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/neural_network/simple_neural_network.py b/neural_network/simple_neural_network.py index 55c3ec3bf81b..9ea1252e4d25 100644 --- a/neural_network/simple_neural_network.py +++ b/neural_network/simple_neural_network.py @@ -52,3 +52,8 @@ def forward_propagation(expected: int, number_propagations: int) -> float: weight += INITIAL_VALUE * layer_1_delta return layer_1 * 100 + +if __name__ == "__main__": + expected = int(input("Expected value: ")) + number_propagations = int(input("Number of propagations: ")) + print(forward_propagation(expected, number_propagations)) From 5d3d778dd140bda03e7e202f4e2901dcbbc047d2 Mon Sep 17 00:00:00 2001 From: Caio Cordeiro Date: Sat, 1 Oct 2022 06:27:12 -0300 Subject: [PATCH 4/7] fix: solve pre-commit failure --- neural_network/simple_neural_network.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/neural_network/simple_neural_network.py b/neural_network/simple_neural_network.py index 9ea1252e4d25..c560b4bf19d5 100644 --- a/neural_network/simple_neural_network.py +++ b/neural_network/simple_neural_network.py @@ -3,8 +3,8 @@ https://towardsdatascience.com/forward-propagation-in-neural-networks-simplified-math-and-code-version-bbcfef6f9250 """ -import random as ran import math +import random # Sigmoid @@ -36,16 +36,15 @@ def forward_propagation(expected: int, number_propagations: int) -> float: >>> res > 31 and res < 33 False """ - expected = expected / 100 # Random weight - weight = 2 * (ran.randint(1, 100)) - 1 + weight = float(2 * (random.randint(1, 100)) - 1) for _ in range(number_propagations): # Forward propagation - layer_1 = sigmoid_function((INITIAL_VALUE * weight)) + layer_1 = sigmoid_function(INITIAL_VALUE * weight) # How much did we miss? - layer_1_error = expected - layer_1 + layer_1_error = (expected / 100) - layer_1 # Error delta layer_1_delta = layer_1_error * sigmoid_function(layer_1, True) # Update weight @@ -53,6 +52,7 @@ def forward_propagation(expected: int, number_propagations: int) -> float: return layer_1 * 100 + if __name__ == "__main__": expected = int(input("Expected value: ")) number_propagations = int(input("Number of propagations: ")) From 83de3f52f51ba6e959060c54f3f3f22bc1d7e5d3 Mon Sep 17 00:00:00 2001 From: Caio Cordeiro Date: Sat, 1 Oct 2022 07:01:23 -0300 Subject: [PATCH 5/7] feat: add doctest inside code execution --- neural_network/simple_neural_network.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/neural_network/simple_neural_network.py b/neural_network/simple_neural_network.py index c560b4bf19d5..952f9bebe71e 100644 --- a/neural_network/simple_neural_network.py +++ b/neural_network/simple_neural_network.py @@ -3,6 +3,7 @@ https://towardsdatascience.com/forward-propagation-in-neural-networks-simplified-math-and-code-version-bbcfef6f9250 """ +import doctest import math import random @@ -54,6 +55,7 @@ def forward_propagation(expected: int, number_propagations: int) -> float: if __name__ == "__main__": + print(doctest.testmod()) expected = int(input("Expected value: ")) number_propagations = int(input("Number of propagations: ")) print(forward_propagation(expected, number_propagations)) From a4a13649de979766387788c73a1671fa91cf6e5f Mon Sep 17 00:00:00 2001 From: Caio Cordeiro Date: Sat, 1 Oct 2022 07:11:37 -0300 Subject: [PATCH 6/7] fix: PR requested changes --- neural_network/simple_neural_network.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/neural_network/simple_neural_network.py b/neural_network/simple_neural_network.py index 952f9bebe71e..2bd70428b166 100644 --- a/neural_network/simple_neural_network.py +++ b/neural_network/simple_neural_network.py @@ -3,7 +3,6 @@ https://towardsdatascience.com/forward-propagation-in-neural-networks-simplified-math-and-code-version-bbcfef6f9250 """ -import doctest import math import random @@ -55,7 +54,9 @@ def forward_propagation(expected: int, number_propagations: int) -> float: if __name__ == "__main__": - print(doctest.testmod()) + import doctest + + doctest.testmod() expected = int(input("Expected value: ")) number_propagations = int(input("Number of propagations: ")) print(forward_propagation(expected, number_propagations)) From 9d2ca827f2e4bdd61cff8811d9b565f934083393 Mon Sep 17 00:00:00 2001 From: Caio Cordeiro Date: Sat, 1 Oct 2022 09:06:28 -0300 Subject: [PATCH 7/7] fix: pr requested changes --- neural_network/simple_neural_network.py | 1 + 1 file changed, 1 insertion(+) diff --git a/neural_network/simple_neural_network.py b/neural_network/simple_neural_network.py index 2bd70428b166..f2a3234873b5 100644 --- a/neural_network/simple_neural_network.py +++ b/neural_network/simple_neural_network.py @@ -57,6 +57,7 @@ def forward_propagation(expected: int, number_propagations: int) -> float: import doctest doctest.testmod() + expected = int(input("Expected value: ")) number_propagations = int(input("Number of propagations: ")) print(forward_propagation(expected, number_propagations))