From 15865812d898db495b00bf8df72edb1b4ddc54f6 Mon Sep 17 00:00:00 2001
From: Lenoctambule <106790775+lenoctambule@users.noreply.github.com>
Date: Thu, 9 Apr 2026 18:31:32 +0200
Subject: [PATCH 1/5] refactor(autoencoder.py): __init__ code de-dup
---
examples/mnist_test.py | 90 +++++++++++++++++++++-----------------
src/easyvae/autoencoder.py | 43 +++++++++---------
2 files changed, 69 insertions(+), 64 deletions(-)
diff --git a/examples/mnist_test.py b/examples/mnist_test.py
index 1058590..7aff0f9 100644
--- a/examples/mnist_test.py
+++ b/examples/mnist_test.py
@@ -8,6 +8,7 @@ from easyvae.autoencoder import ( # noqa
AAutoencoder
)
from easyvae.activations import LeakyReLU
+from easyvae.utils import dynamic_loss_plot_finish
def load_mnist() -> list[np.ndarray]:
@@ -38,15 +39,15 @@ def mnist_train(
autoencoder = cls(
[in_len, 256, 2],
[2, 256, in_len],
- 0.001,
+ 0.0001,
LeakyReLU()
)
def handler(signum, frame):
print(f"Saving {filename} before exit ...")
autoencoder.save(filename)
- plt.close()
- plt.ioff()
+ if plt.get_fignums():
+ dynamic_loss_plot_finish()
mnist_test(autoencoder)
exit()
@@ -62,6 +63,45 @@ def mnist_train(
return autoencoder
+def plot_mnist_latent_space(autoencoder: AAutoencoder, x: np.ndarray, y,):
+ codes = []
+ for x in x:
+ _, c = autoencoder.forward(x.flatten())
+ codes.append(c)
+ codes = np.array(codes)
+ if codes.shape[1] == 2:
+ plt.figure(figsize=(6, 6))
+ scatter = plt.scatter(
+ codes[:, 0],
+ codes[:, 1],
+ c=y,
+ cmap='tab10',
+ s=5,
+ alpha=0.7
+ )
+ plt.colorbar(scatter)
+ plt.grid(True)
+ plt.show()
+
+
+def plot_random_reconstruction(autoencoder: AAutoencoder,
+ example: np.ndarray,
+ img_shape,
+ y):
+ output, code = autoencoder.forward(example.flatten())
+ plt.subplot(1, 3, 1)
+ plt.matshow(
+ example.reshape(img_shape),
+ fignum=False)
+ plt.title(f"Input ({y})")
+ plt.subplot(1, 3, 2)
+ plt.matshow(
+ output.reshape(img_shape),
+ fignum=False)
+ plt.title(f"Output ({y})")
+ print(f'{code=}')
+
+
def mnist_test(model: str | AAutoencoder):
x_train, _, x_test, y_test = load_mnist()
in_len = x_train[0].shape[0] * x_train[0].shape[0]
@@ -76,41 +116,9 @@ def mnist_test(model: str | AAutoencoder):
autoencoder = model
idx = np.random.randint(0, len(x_test))
example: np.ndarray = x_test[idx]
- output, code = autoencoder.forward(example.flatten())
- plt.subplot(1, 3, 1)
- plt.matshow(
- example.reshape(img_shape),
- fignum=False)
- plt.title(f"Input ({y_test[idx]})")
- plt.subplot(1, 3, 2)
- plt.matshow(
- output.reshape(img_shape),
- fignum=False)
- plt.title(f"Output ({y_test[idx]})")
- plt.subplot(1, 3, 3)
- code = np.reshape(code, (code.shape[0], 1))
- plt.matshow(code, fignum=False)
- plt.title(f"Code ({y_test[idx]})")
- plt.show()
- if code.shape[0] == 2:
- codes = []
- for x in x_test:
- _, c = autoencoder.forward(x.flatten())
- codes.append(c)
- codes = np.array(codes)
- if codes.shape[1] == 2:
- plt.figure(figsize=(6, 6))
- scatter = plt.scatter(
- codes[:, 0],
- codes[:, 1],
- c=y_test,
- cmap='tab10',
- s=5,
- alpha=0.7
- )
- plt.colorbar(scatter)
- plt.grid(True)
- plt.show()
+ plot_random_reconstruction(autoencoder, example, img_shape, y_test[idx])
+ if autoencoder.space_dim == 2:
+ plot_mnist_latent_space(autoencoder, x_test, y_test)
if __name__ == "__main__":
@@ -122,14 +130,14 @@ if __name__ == "__main__":
'-e',
type=int,
nargs='?',
- default=1000,
+ default=30,
help='Max epochs'
)
parser.add_argument(
'-p',
type=int,
nargs='?',
- default=5,
+ default=30,
help='Patience'
)
parser.add_argument(
@@ -141,7 +149,7 @@ if __name__ == "__main__":
parser.add_argument(
'-r',
action='store_true',
- help='Run mode'
+ help='Run the model'
)
args = parser.parse_args(sys.argv[1:])
if args.r:
diff --git a/src/easyvae/autoencoder.py b/src/easyvae/autoencoder.py
index 410699c..e4a9be9 100644
--- a/src/easyvae/autoencoder.py
+++ b/src/easyvae/autoencoder.py
@@ -13,6 +13,21 @@ LOADER = ['⡿', '⣟', '⣯', '⣷', '⣾', '⣽', '⣻', '⢿']
class AAutoencoder(ABC):
+ @abstractmethod
+ def __init__(self,
+ encoder_layers: list[int],
+ decoder_layers: list[int],
+ lr: float,
+ activation_func: ActivationFunc):
+ if encoder_layers[-1] != decoder_layers[0]:
+ raise Exception(
+ f"Encoder output and decoder input don't match {encoder_layers[-1]} != {encoder_layers[0]}" # noqa
+ )
+ self.encoder = DeepNNLayer(encoder_layers, lr, activation_func)
+ self.decoder = DeepNNLayer(decoder_layers, lr, activation_func)
+ self.space_dim = decoder_layers[0]
+ self.lr = lr
+
def train_dataset(self,
data_set: list[np.ndarray],
max_epoch: int,
@@ -75,17 +90,8 @@ class AAutoencoder(ABC):
class ClassicalAutoencoder(AAutoencoder):
- def __init__(self,
- encoder_layers: list[int],
- decoder_layers: list[int],
- lr: float,
- activation_func: ActivationFunc):
- if encoder_layers[-1] != decoder_layers[0]:
- raise Exception(
- f"Encoder output and decoder input don't match {encoder_layers[-1]} != {encoder_layers[0]}" # noqa
- )
- self.encoder = DeepNNLayer(encoder_layers, lr, activation_func)
- self.decoder = DeepNNLayer(decoder_layers, lr, activation_func)
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
def __str__(self):
return f'Encoder:\n{self.encoder}\n\nDecoder:\n{self.decoder}'
@@ -119,18 +125,9 @@ class ClassicalAutoencoder(AAutoencoder):
class VariationalAutoencoder(AAutoencoder):
- def __init__(self,
- encoder_layers: list[int],
- decoder_layers: list[int],
- lr: float,
- activation_func: ActivationFunc):
- if encoder_layers[-1] != decoder_layers[0]:
- raise Exception(
- f"Encoder output and decoder input don't match {encoder_layers[-1]} != {encoder_layers[0]}" # noqa
- )
- self.encoder = DeepNNLayer(encoder_layers, lr, activation_func)
- self.decoder = DeepNNLayer(decoder_layers, lr, activation_func)
- self.sampler = SampleLayer(self.encoder.out_size, lr, Identity())
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.sampler = SampleLayer(self.encoder.out_size, self.lr, Identity())
def loss(self, data_set: list[np.ndarray]) -> float:
loss = 0
From 075382cfb03f899737361d1ec774f5d0ad95eb86 Mon Sep 17 00:00:00 2001
From: Lenoctambule <106790775+lenoctambule@users.noreply.github.com>
Date: Thu, 9 Apr 2026 18:43:27 +0200
Subject: [PATCH 2/5] fix(mnist_test.py): subplot invalid ncols
---
examples/mnist_test.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/examples/mnist_test.py b/examples/mnist_test.py
index 7aff0f9..5e68c9a 100644
--- a/examples/mnist_test.py
+++ b/examples/mnist_test.py
@@ -89,12 +89,12 @@ def plot_random_reconstruction(autoencoder: AAutoencoder,
img_shape,
y):
output, code = autoencoder.forward(example.flatten())
- plt.subplot(1, 3, 1)
+ plt.subplot(1, 2, 1)
plt.matshow(
example.reshape(img_shape),
fignum=False)
plt.title(f"Input ({y})")
- plt.subplot(1, 3, 2)
+ plt.subplot(1, 2, 2)
plt.matshow(
output.reshape(img_shape),
fignum=False)
From b4963513cc83b565ed2e6a9307b12d8d1ec92fa9 Mon Sep 17 00:00:00 2001
From: Lenoctambule <106790775+lenoctambule@users.noreply.github.com>
Date: Thu, 9 Apr 2026 19:19:59 +0200
Subject: [PATCH 3/5] fix: unneeded func params
---
src/easyvae/autoencoder.py | 2 +-
src/easyvae/utils.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/easyvae/autoencoder.py b/src/easyvae/autoencoder.py
index e4a9be9..5f436c9 100644
--- a/src/easyvae/autoencoder.py
+++ b/src/easyvae/autoencoder.py
@@ -64,7 +64,7 @@ class AAutoencoder(ABC):
break
epoch += 1
if display_loss is True:
- dynamic_loss_plot_finish(ax, line)
+ dynamic_loss_plot_finish()
return losses
def save(self, path: str):
diff --git a/src/easyvae/utils.py b/src/easyvae/utils.py
index e407bff..7e61971 100644
--- a/src/easyvae/utils.py
+++ b/src/easyvae/utils.py
@@ -41,6 +41,6 @@ def dynamic_loss_plot_update(ax, line, loss):
plt.pause(0.1)
-def dynamic_loss_plot_finish(ax, line):
+def dynamic_loss_plot_finish():
plt.ioff()
plt.show()
From 0b460287029a30b41dffc06fa2a4aa962240baac Mon Sep 17 00:00:00 2001
From: Lenoctambule <106790775+lenoctambule@users.noreply.github.com>
Date: Thu, 9 Apr 2026 19:21:13 +0200
Subject: [PATCH 4/5] docs: illustration of MNIST latent-space representation
---
README.md | 11 +++++++++++
media/latent-space.png | Bin 0 -> 185631 bytes
2 files changed, 11 insertions(+)
create mode 100644 media/latent-space.png
diff --git a/README.md b/README.md
index 9e75be6..8c04145 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,15 @@
# Python AutoEncoder from scratch using Numpy
+
+
+
+
+ Latent-space representation of the MNIST dataset using Variational Autoencoder
+
+
+
## Usage
diff --git a/media/latent-space.png b/media/latent-space.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ef57b3b240144239f6fb9e1569d9ee817db8175
GIT binary patch
literal 185631
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%0D*h_(Zp?r@jjC1R~8zEdW9j`i;Ud
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