diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nn.py | 37 |
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 |