aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2024-06-09 08:50:49 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2024-06-09 08:50:49 +0530
commit194f7d40561485f5ac3a3556721cfbc542be3b07 (patch)
tree49edbcc9f1daf378396a8dd6a31c0078df3976f6 /src
parent40240b0b383abc2d3e81e2bcfe5e4b6d6fdfec2a (diff)
Update
Diffstat (limited to 'src')
-rw-r--r--src/nn.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/nn.py b/src/nn.py
new file mode 100644
index 0000000..e5d20d4
--- /dev/null
+++ b/src/nn.py
@@ -0,0 +1,37 @@
+from .scalar import Scalar
+import random
+
+class Neuron:
+ def __init__(self, n_X):
+ self.n_X = n_X
+ self.w = [ Scalar(random.uniform(-1, 1)) for _ in range(n_X) ]
+ self.b = Scalar(random.uniform(-1, 1))
+
+ def __call__(self, X):
+ result = 0
+
+ for wi, Xi in zip(self.w, X):
+ result += wi * Xi
+
+ result += self.b
+
+ return result.tanh()
+
+class Layer:
+ def __init__(self, n_X, n_y):
+ self.neurons = [ Neuron(n_X) for _ in range(n_y) ]
+
+ def __call__(self, X):
+ result = [ n(X) for n in self.neurons ]
+ return result[0] if len(result) == 1 else result
+
+class MLP:
+ def __init__(self, n_X, layers):
+ sz = [ n_X ] + layers
+ self.layers = [ Layer(sz[i], sz[i + 1]) for i in range(len(layers)) ]
+
+ def __call__(self, X):
+ for layer in self.layers:
+ X = layer(X)
+
+ return X