From 99b144c3c76987db7e6506aae5ec2bb3f7bdd863 Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Sat, 4 Oct 2025 21:03:58 +0300 Subject: [PATCH] initial commit --- generic.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ nn1-normal.py | 13 +++++++++++++ nn10-elman.py | 23 +++++++++++++++++++++++ nn2-normal.py | 13 +++++++++++++ nn3-normal.py | 22 ++++++++++++++++++++++ nn4-normal.py | 17 +++++++++++++++++ nn5-cascade.py | 19 +++++++++++++++++++ nn6-cascade.py | 19 +++++++++++++++++++ nn7-cascade.py | 24 ++++++++++++++++++++++++ nn8-elman.py | 19 +++++++++++++++++++ nn9-elman.py | 19 +++++++++++++++++++ 11 files changed, 239 insertions(+) create mode 100644 generic.py create mode 100644 nn1-normal.py create mode 100644 nn10-elman.py create mode 100644 nn2-normal.py create mode 100644 nn3-normal.py create mode 100644 nn4-normal.py create mode 100644 nn5-cascade.py create mode 100644 nn6-cascade.py create mode 100644 nn7-cascade.py create mode 100644 nn8-elman.py create mode 100644 nn9-elman.py diff --git a/generic.py b/generic.py new file mode 100644 index 0000000..bbf5b82 --- /dev/null +++ b/generic.py @@ -0,0 +1,51 @@ +import tensorflow as tf +import numpy as np +from matplotlib import pyplot as plt +import itertools as it + +from sklearn.metrics import r2_score + +from math import sin + +def f(x, y): return (1 + sin(x**2 + 5*y)) / 2 + +def train_generic(model, marker): + model.compile(optimizer = "adam", loss = "mse") + + X = np.linspace(0, 10, 300) + Y = np.linspace(0, 10, 300) + + ins = np.array(list(it.product(X, Y))) + ous = np.array(list(f(*i) for i in ins)) + + result = model.fit(ins, ous, epochs = 200, batch_size = 2048) + + model.save_weights(f"save-{marker}.weights.h5") + +def verify_generic(model, marker): + model.compile(optimizer = "adam", loss = "mse") + model.load_weights(f"save-{marker}.weights.h5") + + X = np.linspace(0, 10, 50) + Y = np.linspace(0, 10, 50) + + ins = np.array(list(it.product(X, Y))) + ous = np.array(list(f(*i) for i in ins)) + + preds = model.predict(ins) + + print(f"Model {marker} has {r2_score(ous, preds)} r2 score") + + preds_flat = [i[0] for i in preds] + + px = np.array([X] * len(X)) + py = np.array([[x] * (len(X)) for x in X]) + pz1 = np.array([ous[i*len(X):(i+1)*len(X)] for i, _ in enumerate(X)]) + pz2 = np.array([preds_flat[i*len(X):(i+1)*len(X)] for i, _ in enumerate(X)]) + + #print([ous[i*len(X):(i+1)*len(X)] for i, _ in enumerate(X)]) + + p = plt.figure().add_subplot(projection='3d') + p.plot_surface(px, py, pz1, edgecolor = "lime", alpha = 0.1) + p.plot_surface(px, py, pz2, edgecolor = "blue", alpha = 0.3) + plt.show() diff --git a/nn1-normal.py b/nn1-normal.py new file mode 100644 index 0000000..e7a3214 --- /dev/null +++ b/nn1-normal.py @@ -0,0 +1,13 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + +m = tf.keras.models.Sequential([ + l.Input(shape = (2,)), + l.Dense(5, activation='relu'), + l.Dense(1) +]) + +#g.train_generic(m, "ff") +g.verify_generic(m, "ff") diff --git a/nn10-elman.py b/nn10-elman.py new file mode 100644 index 0000000..84fd0b4 --- /dev/null +++ b/nn10-elman.py @@ -0,0 +1,23 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + +m = tf.keras.models.Sequential([ + l.Input(shape = (2, 1)), + l.SimpleRNN(100, activation = "relu", return_sequences = True), + l.SimpleRNN(100, activation = "relu", return_sequences = True), + l.SimpleRNN(100, activation = "relu"), + l.Dense(1) +]) +#i = l.Input(shape = (2,)) +#h1 = l.SimpleRNN(10, activation = "relu", input_shape = (2, 1))(i) +#o = l.Dense(1)(h1) + + +#m = tf.keras.models.Model(inputs = i, outputs = o) + +m.summary() + +#g.train_generic(m, "r3") +g.verify_generic(m, "r3") diff --git a/nn2-normal.py b/nn2-normal.py new file mode 100644 index 0000000..951771b --- /dev/null +++ b/nn2-normal.py @@ -0,0 +1,13 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + +m = tf.keras.models.Sequential([ + l.Input(shape = (2,)), + l.Dense(1000, activation = "relu"), + l.Dense(1) +]) + +#g.train_generic(m, "ff2") +g.verify_generic(m, "ff2") diff --git a/nn3-normal.py b/nn3-normal.py new file mode 100644 index 0000000..ee499d2 --- /dev/null +++ b/nn3-normal.py @@ -0,0 +1,22 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + +m = tf.keras.models.Sequential([ + l.Input(shape = (2,)), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(100, activation = "relu"), + l.Dense(1) +]) + +#g.train_generic(m, "ff3") +g.verify_generic(m, "ff3") diff --git a/nn4-normal.py b/nn4-normal.py new file mode 100644 index 0000000..8b9a83c --- /dev/null +++ b/nn4-normal.py @@ -0,0 +1,17 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + +m = tf.keras.models.Sequential([ + l.Input(shape = (2,)), + l.Dense(500, activation = "relu"), + l.Dense(500, activation = "relu"), + l.Dense(500, activation = "relu"), + l.Dense(500, activation = "relu"), + l.Dense(500, activation = "relu"), + l.Dense(1) +]) + +#g.train_generic(m, "ff4") +g.verify_generic(m, "ff4") diff --git a/nn5-cascade.py b/nn5-cascade.py new file mode 100644 index 0000000..413d5dc --- /dev/null +++ b/nn5-cascade.py @@ -0,0 +1,19 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + + +i = l.Input(shape = (2,)) +h1 = l.Dense(20, activation='relu')(i) + +y = l.Dense(1)(h1) +co = l.Dense(1)(i) + +o = l.Add()([y, co]) + + +m = tf.keras.models.Model(inputs = i, outputs = o) + +#g.train_generic(m, "c1") +g.verify_generic(m, "c1") diff --git a/nn6-cascade.py b/nn6-cascade.py new file mode 100644 index 0000000..a383381 --- /dev/null +++ b/nn6-cascade.py @@ -0,0 +1,19 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + + +i = l.Input(shape = (2,)) +h1 = l.Dense(1000, activation='relu')(i) + +y = l.Dense(1)(h1) +co = l.Dense(1)(i) + +o = l.Add()([y, co]) + + +m = tf.keras.models.Model(inputs = i, outputs = o) + +#g.train_generic(m, "c2") +g.verify_generic(m, "c2") diff --git a/nn7-cascade.py b/nn7-cascade.py new file mode 100644 index 0000000..ad8f9c8 --- /dev/null +++ b/nn7-cascade.py @@ -0,0 +1,24 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + + +i = l.Input(shape = (2,)) +h1 = l.Dense(100, activation='tanh')(i) +h2 = l.Dense(100, activation='tanh')(h1) +h3 = l.Dense(100, activation='tanh')(h2) +h4 = l.Dense(100, activation='tanh')(h3) +h5 = l.Dense(100, activation='tanh')(h4) +h6 = l.Dense(100, activation='tanh')(h5) + +y = l.Dense(1)(h6) +co = l.Dense(1)(i) + +o = l.Add()([y, co]) + + +m = tf.keras.models.Model(inputs = i, outputs = o) + +#g.train_generic(m, "c3") +g.verify_generic(m, "c3") diff --git a/nn8-elman.py b/nn8-elman.py new file mode 100644 index 0000000..aa6e45f --- /dev/null +++ b/nn8-elman.py @@ -0,0 +1,19 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + +m = tf.keras.models.Sequential([ + l.Input(shape = (2, 1)), + l.SimpleRNN(10, activation = "relu"), + l.Dense(1) +]) +#i = l.Input(shape = (2,)) +#h1 = l.SimpleRNN(10, activation = "relu", input_shape = (2, 1))(i) +#o = l.Dense(1)(h1) + + +#m = tf.keras.models.Model(inputs = i, outputs = o) + +#g.train_generic(m, "r1") +g.verify_generic(m, "r1") diff --git a/nn9-elman.py b/nn9-elman.py new file mode 100644 index 0000000..15f0c32 --- /dev/null +++ b/nn9-elman.py @@ -0,0 +1,19 @@ +import tensorflow as tf +import tensorflow.keras.layers as l + +import generic as g + +m = tf.keras.models.Sequential([ + l.Input(shape = (2, 1)), + l.SimpleRNN(1000, activation = "relu"), + l.Dense(1) +]) +#i = l.Input(shape = (2,)) +#h1 = l.SimpleRNN(10, activation = "relu", input_shape = (2, 1))(i) +#o = l.Dense(1)(h1) + + +#m = tf.keras.models.Model(inputs = i, outputs = o) + +#g.train_generic(m, "r2") +g.verify_generic(m, "r2")