From af7ef14bbc7a4409cdaa3823544e41781161c4a0 Mon Sep 17 00:00:00 2001 From: Piotrek Wysocki Date: Sun, 5 Dec 2021 19:22:56 +0100 Subject: [PATCH 1/6] Implementation of code from p001 in MySQL --- MySQL/p001-Basic-Neuron-3-inputs.sql | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 MySQL/p001-Basic-Neuron-3-inputs.sql diff --git a/MySQL/p001-Basic-Neuron-3-inputs.sql b/MySQL/p001-Basic-Neuron-3-inputs.sql new file mode 100644 index 0000000..b7c20ca --- /dev/null +++ b/MySQL/p001-Basic-Neuron-3-inputs.sql @@ -0,0 +1,40 @@ +-- +-- Creates a basic neuron with 3 inputs. +-- +-- Associated YT NNFS tutorial: https://www.youtube.com/watch?v=Wo5dMEP_BbI +-- + +DROP DATABASE IF EXISTS `P001BasicNeuron3Inputs`; +CREATE DATABASE `P001BasicNeuron3Inputs`; + +USE `P001BasicNeuron3Inputs`; + +CREATE TABLE `inputs` +( + `i0` DOUBLE NOT NULL, + `i1` DOUBLE NOT NULL, + `i2` DOUBLE NOT NULL +); + +CREATE TABLE `weights` +( + `w0` DOUBLE NOT NULL, + `w1` DOUBLE NOT NULL, + `w2` DOUBLE NOT NULL +); + +CREATE TABLE `bias` +( + `b` DOUBLE NOT NULL +); + +INSERT INTO `inputs` (`i0`, `i1`, `i2`) VALUES (1.2, 5.1, 2.1); +INSERT INTO `weights` (`w0`, `w1`, `w2`) VALUES (3.1, 2.1, 8.7); +INSERT INTO `bias` (`b`) VALUES (3.0); + +SELECT ( + ( SELECT inputs.i0 FROM inputs ) * ( SELECT weights.w0 FROM weights ) + + ( SELECT inputs.i1 FROM inputs ) * ( SELECT weights.w1 FROM weights ) + + ( SELECT inputs.i2 FROM inputs ) * ( SELECT weights.w2 FROM weights ) + + ( SELECT bias.b FROM bias ) +) AS output; \ No newline at end of file From afef295e5f2723e6459d6b357af4e69f84107312 Mon Sep 17 00:00:00 2001 From: Piotrek Wysocki Date: Mon, 6 Dec 2021 18:14:36 +0100 Subject: [PATCH 2/6] Change database name to underscore_case --- MySQL/p001-Basic-Neuron-3-inputs.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MySQL/p001-Basic-Neuron-3-inputs.sql b/MySQL/p001-Basic-Neuron-3-inputs.sql index b7c20ca..c06f350 100644 --- a/MySQL/p001-Basic-Neuron-3-inputs.sql +++ b/MySQL/p001-Basic-Neuron-3-inputs.sql @@ -4,10 +4,10 @@ -- Associated YT NNFS tutorial: https://www.youtube.com/watch?v=Wo5dMEP_BbI -- -DROP DATABASE IF EXISTS `P001BasicNeuron3Inputs`; -CREATE DATABASE `P001BasicNeuron3Inputs`; +DROP DATABASE IF EXISTS `p001_basic_neuron_3_inputs`; +CREATE DATABASE `p001_basic_neuron_3_inputs`; -USE `P001BasicNeuron3Inputs`; +USE `p001_basic_neuron_3_inputs`; CREATE TABLE `inputs` ( From f86c1962eb94e2ddd15d8a98e9fd582675dc7361 Mon Sep 17 00:00:00 2001 From: Piotrek Wysocki Date: Mon, 6 Dec 2021 18:22:07 +0100 Subject: [PATCH 3/6] Implementation of code from p002 in MySQL --- MySQL/p002-Basic-Neuron-Layer.sql | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 MySQL/p002-Basic-Neuron-Layer.sql diff --git a/MySQL/p002-Basic-Neuron-Layer.sql b/MySQL/p002-Basic-Neuron-Layer.sql new file mode 100644 index 0000000..21dabe7 --- /dev/null +++ b/MySQL/p002-Basic-Neuron-Layer.sql @@ -0,0 +1,52 @@ +-- +-- Creates a simple layer of neurons, with 4 inputs. +-- +-- Associated YT NNFS tutorial: https://www.youtube.com/watch?v=lGLto9Xd7bU +-- + +DROP DATABASE IF EXISTS `p002_basic_neuron_layer`; +CREATE DATABASE `p002_basic_neuron_layer`; + +USE `p002_basic_neuron_layer`; + +CREATE TABLE `inputs` ( `i0` DOUBLE NOT NULL, `i1` DOUBLE NOT NULL, `i2` DOUBLE NOT NULL, `i3` DOUBLE NOT NULL ); + +CREATE TABLE `weights1` ( `w0` DOUBLE NOT NULL, `w1` DOUBLE NOT NULL, `w2` DOUBLE NOT NULL, `w3` DOUBLE NOT NULL ); +CREATE TABLE `weights2` ( `w0` DOUBLE NOT NULL, `w1` DOUBLE NOT NULL, `w2` DOUBLE NOT NULL, `w3` DOUBLE NOT NULL ); +CREATE TABLE `weights3` ( `w0` DOUBLE NOT NULL, `w1` DOUBLE NOT NULL, `w2` DOUBLE NOT NULL, `w3` DOUBLE NOT NULL ); + +CREATE TABLE `bias1` ( `b` DOUBLE NOT NULL ); +CREATE TABLE `bias2` ( `b` DOUBLE NOT NULL ); +CREATE TABLE `bias3` ( `b` DOUBLE NOT NULL ); + +INSERT INTO `inputs` (`i0`, `i1`, `i2`, `i3`) VALUES ( 1, 2, 3, 2.5 ); + +INSERT INTO `weights1` (`w0`, `w1`, `w2`, `w3`) VALUES ( 0.2, 0.8, -0.5, 1 ); +INSERT INTO `weights2` (`w0`, `w1`, `w2`, `w3`) VALUES ( 0.5, -0.91, 0.26, -0.5 ); +INSERT INTO `weights3` (`w0`, `w1`, `w2`, `w3`) VALUES ( -0.26, -0.27, 0.17, 0.87 ); + +INSERT INTO `bias1` (`b`) VALUES (2); +INSERT INTO `bias2` (`b`) VALUES (3); +INSERT INTO `bias3` (`b`) VALUES (0.5); + +SELECT ( + ( SELECT inputs.i0 FROM inputs ) * ( SELECT weights1.w0 FROM weights1 ) + + ( SELECT inputs.i1 FROM inputs ) * ( SELECT weights1.w1 FROM weights1 ) + + ( SELECT inputs.i2 FROM inputs ) * ( SELECT weights1.w2 FROM weights1 ) + + ( SELECT inputs.i3 FROM inputs ) * ( SELECT weights1.w3 FROM weights1 ) + + ( SELECT bias1.b FROM bias1 ) +) AS o1, +( + ( SELECT inputs.i0 FROM inputs ) * ( SELECT weights2.w0 FROM weights2 ) + + ( SELECT inputs.i1 FROM inputs ) * ( SELECT weights2.w1 FROM weights2 ) + + ( SELECT inputs.i2 FROM inputs ) * ( SELECT weights2.w2 FROM weights2 ) + + ( SELECT inputs.i3 FROM inputs ) * ( SELECT weights2.w3 FROM weights2 ) + + ( SELECT bias2.b FROM bias2 ) +) AS o2, +( + ( SELECT inputs.i0 FROM inputs ) * ( SELECT weights3.w0 FROM weights3 ) + + ( SELECT inputs.i1 FROM inputs ) * ( SELECT weights3.w1 FROM weights3 ) + + ( SELECT inputs.i2 FROM inputs ) * ( SELECT weights3.w2 FROM weights3 ) + + ( SELECT inputs.i3 FROM inputs ) * ( SELECT weights3.w3 FROM weights3 ) + + ( SELECT bias3.b FROM bias3 ) +) AS o3 \ No newline at end of file From aaff6b2f57745217aa4ca1fbd82182aaa823c9d2 Mon Sep 17 00:00:00 2001 From: Piotrek Wysocki Date: Sun, 12 Dec 2021 14:25:34 +0100 Subject: [PATCH 4/6] renaming columns --- MySQL/p001-Basic-Neuron-3-inputs.sql | 30 ++++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/MySQL/p001-Basic-Neuron-3-inputs.sql b/MySQL/p001-Basic-Neuron-3-inputs.sql index c06f350..788beb6 100644 --- a/MySQL/p001-Basic-Neuron-3-inputs.sql +++ b/MySQL/p001-Basic-Neuron-3-inputs.sql @@ -11,30 +11,30 @@ USE `p001_basic_neuron_3_inputs`; CREATE TABLE `inputs` ( - `i0` DOUBLE NOT NULL, - `i1` DOUBLE NOT NULL, - `i2` DOUBLE NOT NULL + `0` DOUBLE NOT NULL, + `1` DOUBLE NOT NULL, + `2` DOUBLE NOT NULL ); CREATE TABLE `weights` ( - `w0` DOUBLE NOT NULL, - `w1` DOUBLE NOT NULL, - `w2` DOUBLE NOT NULL + `0` DOUBLE NOT NULL, + `1` DOUBLE NOT NULL, + `2` DOUBLE NOT NULL ); CREATE TABLE `bias` ( - `b` DOUBLE NOT NULL + `0` DOUBLE NOT NULL ); -INSERT INTO `inputs` (`i0`, `i1`, `i2`) VALUES (1.2, 5.1, 2.1); -INSERT INTO `weights` (`w0`, `w1`, `w2`) VALUES (3.1, 2.1, 8.7); -INSERT INTO `bias` (`b`) VALUES (3.0); +INSERT INTO `inputs` (`0`, `1`, `2`) VALUES ( 1.2, 5.1, 2.1 ); +INSERT INTO `weights` (`0`, `1`, `2`) VALUES ( 3.1, 2.1, 8.7 ); +INSERT INTO `bias` (`0`) VALUES ( 3.0 ); SELECT ( - ( SELECT inputs.i0 FROM inputs ) * ( SELECT weights.w0 FROM weights ) + - ( SELECT inputs.i1 FROM inputs ) * ( SELECT weights.w1 FROM weights ) + - ( SELECT inputs.i2 FROM inputs ) * ( SELECT weights.w2 FROM weights ) + - ( SELECT bias.b FROM bias ) -) AS output; \ No newline at end of file + ( SELECT `inputs`.`0` FROM inputs ) * ( SELECT `weights`.`0` FROM weights ) + + ( SELECT `inputs`.`1` FROM inputs ) * ( SELECT `weights`.`1` FROM weights ) + + ( SELECT `inputs`.`2` FROM inputs ) * ( SELECT `weights`.`2` FROM weights ) + + ( SELECT `bias`.`0` FROM bias ) + ) AS output; \ No newline at end of file From d52151e6dfdf9e2dbadd4215ae1ca9f617f10c9d Mon Sep 17 00:00:00 2001 From: Piotrek Wysocki Date: Sun, 12 Dec 2021 14:34:14 +0100 Subject: [PATCH 5/6] renaming columns --- MySQL/p002-Basic-Neuron-Layer.sql | 64 +++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/MySQL/p002-Basic-Neuron-Layer.sql b/MySQL/p002-Basic-Neuron-Layer.sql index 21dabe7..18a8ed9 100644 --- a/MySQL/p002-Basic-Neuron-Layer.sql +++ b/MySQL/p002-Basic-Neuron-Layer.sql @@ -9,44 +9,44 @@ CREATE DATABASE `p002_basic_neuron_layer`; USE `p002_basic_neuron_layer`; -CREATE TABLE `inputs` ( `i0` DOUBLE NOT NULL, `i1` DOUBLE NOT NULL, `i2` DOUBLE NOT NULL, `i3` DOUBLE NOT NULL ); +CREATE TABLE `inputs` ( `0` DOUBLE NOT NULL, `1` DOUBLE NOT NULL, `2` DOUBLE NOT NULL, `3` DOUBLE NOT NULL ); -CREATE TABLE `weights1` ( `w0` DOUBLE NOT NULL, `w1` DOUBLE NOT NULL, `w2` DOUBLE NOT NULL, `w3` DOUBLE NOT NULL ); -CREATE TABLE `weights2` ( `w0` DOUBLE NOT NULL, `w1` DOUBLE NOT NULL, `w2` DOUBLE NOT NULL, `w3` DOUBLE NOT NULL ); -CREATE TABLE `weights3` ( `w0` DOUBLE NOT NULL, `w1` DOUBLE NOT NULL, `w2` DOUBLE NOT NULL, `w3` DOUBLE NOT NULL ); +CREATE TABLE `weights1` ( `0` DOUBLE NOT NULL, `1` DOUBLE NOT NULL, `2` DOUBLE NOT NULL, `3` DOUBLE NOT NULL ); +CREATE TABLE `weights2` ( `0` DOUBLE NOT NULL, `1` DOUBLE NOT NULL, `2` DOUBLE NOT NULL, `3` DOUBLE NOT NULL ); +CREATE TABLE `weights3` ( `0` DOUBLE NOT NULL, `1` DOUBLE NOT NULL, `2` DOUBLE NOT NULL, `3` DOUBLE NOT NULL ); -CREATE TABLE `bias1` ( `b` DOUBLE NOT NULL ); -CREATE TABLE `bias2` ( `b` DOUBLE NOT NULL ); -CREATE TABLE `bias3` ( `b` DOUBLE NOT NULL ); +CREATE TABLE `bias1` ( `0` DOUBLE NOT NULL ); +CREATE TABLE `bias2` ( `0` DOUBLE NOT NULL ); +CREATE TABLE `bias3` ( `0` DOUBLE NOT NULL ); -INSERT INTO `inputs` (`i0`, `i1`, `i2`, `i3`) VALUES ( 1, 2, 3, 2.5 ); +INSERT INTO `inputs` (`0`, `1`, `2`, `3`) VALUES ( 1, 2, 3, 2.5 ); -INSERT INTO `weights1` (`w0`, `w1`, `w2`, `w3`) VALUES ( 0.2, 0.8, -0.5, 1 ); -INSERT INTO `weights2` (`w0`, `w1`, `w2`, `w3`) VALUES ( 0.5, -0.91, 0.26, -0.5 ); -INSERT INTO `weights3` (`w0`, `w1`, `w2`, `w3`) VALUES ( -0.26, -0.27, 0.17, 0.87 ); +INSERT INTO `weights1` (`0`, `1`, `2`, `3`) VALUES ( 0.2, 0.8, -0.5, 1 ); +INSERT INTO `weights2` (`0`, `1`, `2`, `3`) VALUES ( 0.5, -0.91, 0.26, -0.5 ); +INSERT INTO `weights3` (`0`, `1`, `2`, `3`) VALUES ( -0.26, -0.27, 0.17, 0.87 ); -INSERT INTO `bias1` (`b`) VALUES (2); -INSERT INTO `bias2` (`b`) VALUES (3); -INSERT INTO `bias3` (`b`) VALUES (0.5); +INSERT INTO `bias1` (`0`) VALUES (2); +INSERT INTO `bias2` (`0`) VALUES (3); +INSERT INTO `bias3` (`0`) VALUES (0.5); SELECT ( - ( SELECT inputs.i0 FROM inputs ) * ( SELECT weights1.w0 FROM weights1 ) + - ( SELECT inputs.i1 FROM inputs ) * ( SELECT weights1.w1 FROM weights1 ) + - ( SELECT inputs.i2 FROM inputs ) * ( SELECT weights1.w2 FROM weights1 ) + - ( SELECT inputs.i3 FROM inputs ) * ( SELECT weights1.w3 FROM weights1 ) + - ( SELECT bias1.b FROM bias1 ) -) AS o1, + ( SELECT `inputs`.`0` FROM inputs ) * ( SELECT `weights1`.`0` FROM weights1 ) + + ( SELECT `inputs`.`1` FROM inputs ) * ( SELECT `weights1`.`1` FROM weights1 ) + + ( SELECT `inputs`.`2` FROM inputs ) * ( SELECT `weights1`.`2` FROM weights1 ) + + ( SELECT `inputs`.`3` FROM inputs ) * ( SELECT `weights1`.`3` FROM weights1 ) + + ( SELECT `bias1`.`0` FROM bias1 ) +) AS `1`, ( - ( SELECT inputs.i0 FROM inputs ) * ( SELECT weights2.w0 FROM weights2 ) + - ( SELECT inputs.i1 FROM inputs ) * ( SELECT weights2.w1 FROM weights2 ) + - ( SELECT inputs.i2 FROM inputs ) * ( SELECT weights2.w2 FROM weights2 ) + - ( SELECT inputs.i3 FROM inputs ) * ( SELECT weights2.w3 FROM weights2 ) + - ( SELECT bias2.b FROM bias2 ) -) AS o2, + ( SELECT `inputs`.`0` FROM inputs ) * ( SELECT `weights2`.`0` FROM weights2 ) + + ( SELECT `inputs`.`1` FROM inputs ) * ( SELECT `weights2`.`1` FROM weights2 ) + + ( SELECT `inputs`.`2` FROM inputs ) * ( SELECT `weights2`.`2` FROM weights2 ) + + ( SELECT `inputs`.`3` FROM inputs ) * ( SELECT `weights2`.`3` FROM weights2 ) + + ( SELECT `bias2`.`0` FROM bias2 ) +) AS `2`, ( - ( SELECT inputs.i0 FROM inputs ) * ( SELECT weights3.w0 FROM weights3 ) + - ( SELECT inputs.i1 FROM inputs ) * ( SELECT weights3.w1 FROM weights3 ) + - ( SELECT inputs.i2 FROM inputs ) * ( SELECT weights3.w2 FROM weights3 ) + - ( SELECT inputs.i3 FROM inputs ) * ( SELECT weights3.w3 FROM weights3 ) + - ( SELECT bias3.b FROM bias3 ) -) AS o3 \ No newline at end of file + ( SELECT `inputs`.`0` FROM inputs ) * ( SELECT `weights3`.`0` FROM weights3 ) + + ( SELECT `inputs`.`1` FROM inputs ) * ( SELECT `weights3`.`1` FROM weights3 ) + + ( SELECT `inputs`.`2` FROM inputs ) * ( SELECT `weights3`.`2` FROM weights3 ) + + ( SELECT `inputs`.`3` FROM inputs ) * ( SELECT `weights3`.`3` FROM weights3 ) + + ( SELECT `bias3`.`0` FROM bias3 ) +) AS `3` \ No newline at end of file From 4095671ad61370521579dac6bd97e191fcf8af82 Mon Sep 17 00:00:00 2001 From: Piotrek Wysocki Date: Wed, 29 Dec 2021 11:52:36 +0100 Subject: [PATCH 6/6] Implementation of code from p003 in MySQL --- MySQL/p003-Dot-Product.sql | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 MySQL/p003-Dot-Product.sql diff --git a/MySQL/p003-Dot-Product.sql b/MySQL/p003-Dot-Product.sql new file mode 100644 index 0000000..4af130a --- /dev/null +++ b/MySQL/p003-Dot-Product.sql @@ -0,0 +1,78 @@ +-- +-- Doing dot product with a layer of neurons and multiple inputs +-- +-- Associated YT NNFS tutorial: https://www.youtube.com/watch?v=tMrbN67U9d4 +-- + +DROP DATABASE IF EXISTS `p003_dot_product`; +CREATE DATABASE `p003_dot_product`; + +USE `p003_dot_product`; + +CREATE TABLE `inputs` +( + `0` DOUBLE NOT NULL, + `1` DOUBLE NOT NULL, + `2` DOUBLE NOT NULL, + `3` DOUBLE NOT NULL +); + +CREATE TABLE `weights` +( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `0` DOUBLE NOT NULL, + `1` DOUBLE NOT NULL, + `2` DOUBLE NOT NULL, + `3` DOUBLE NOT NULL, + PRIMARY KEY (`id`) USING BTREE +); + +CREATE TABLE `biases` +( + `weight_id` INT(11) NOT NULL DEFAULT '0', + `bias` DOUBLE NOT NULL +); + +INSERT INTO `inputs` (`0`, `1`, `2`, `3`) +VALUES (1, 2, 3, 2.5); + +INSERT INTO `weights` (`id`, `0`, `1`, `2`, `3`) +VALUES (1, 0.2, 0.8, -0.5, 1), + (2, 0.5, -0.91, 0.26, -0.5), + (3, -0.26, -0.27, 0.17, 0.87); + +INSERT INTO `biases` (`weight_id`, `bias`) +VALUES (1, 2), + (2, 3), + (3, 0.5); + +DELIMITER $$ +CREATE FUNCTION `dot`( + `vector1` JSON, + `vector2` JSON +) RETURNS DOUBLE + NO SQL + DETERMINISTIC + COMMENT 'The dot product of two vectors in json format' +BEGIN + + DECLARE i INT DEFAULT 0; + DECLARE vector_length INT; + DECLARE output DOUBLE DEFAULT 0; + + SET vector_length = JSON_LENGTH(vector1); + + WHILE i < vector_length + DO + SET output = output + JSON_EXTRACT(vector1, CONCAT("$[", i, "]")) * JSON_EXTRACT(vector2, CONCAT("$[", i, "]")); + SET i = i + 1; + END WHILE; + + RETURN output; + +END $$ +DELIMITER ; + +SELECT (dot(JSON_ARRAY(i.`0`, i.`1`, i.`2`, i.`3`),JSON_ARRAY(w.`0`, w.`1`, w.`2`, w.`3`)) + b.bias) AS output +FROM inputs i, weights w, biases b +WHERE b.weight_id = w.id;