diff --git a/MySQL/p001-Basic-Neuron-3-inputs.sql b/MySQL/p001-Basic-Neuron-3-inputs.sql new file mode 100644 index 0000000..788beb6 --- /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 `p001_basic_neuron_3_inputs`; +CREATE DATABASE `p001_basic_neuron_3_inputs`; + +USE `p001_basic_neuron_3_inputs`; + +CREATE TABLE `inputs` +( + `0` DOUBLE NOT NULL, + `1` DOUBLE NOT NULL, + `2` DOUBLE NOT NULL +); + +CREATE TABLE `weights` +( + `0` DOUBLE NOT NULL, + `1` DOUBLE NOT NULL, + `2` DOUBLE NOT NULL +); + +CREATE TABLE `bias` +( + `0` DOUBLE NOT NULL +); + +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`.`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 diff --git a/MySQL/p002-Basic-Neuron-Layer.sql b/MySQL/p002-Basic-Neuron-Layer.sql new file mode 100644 index 0000000..18a8ed9 --- /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` ( `0` DOUBLE NOT NULL, `1` DOUBLE NOT NULL, `2` DOUBLE NOT NULL, `3` 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` ( `0` DOUBLE NOT NULL ); +CREATE TABLE `bias2` ( `0` DOUBLE NOT NULL ); +CREATE TABLE `bias3` ( `0` DOUBLE NOT NULL ); + +INSERT INTO `inputs` (`0`, `1`, `2`, `3`) VALUES ( 1, 2, 3, 2.5 ); + +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` (`0`) VALUES (2); +INSERT INTO `bias2` (`0`) VALUES (3); +INSERT INTO `bias3` (`0`) VALUES (0.5); + +SELECT ( + ( 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`.`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`.`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 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;