feat: add monte-carlo method and MSE to labeling method

This commit is contained in:
Lenoctambule
2026-04-14 19:24:20 +02:00
parent b1dc34e699
commit b635bf0467
2 changed files with 21 additions and 7 deletions

View File

@@ -37,7 +37,7 @@ def mnist_train(
autoencoder = cls(
[in_len, 256, 2],
[2, 256, in_len],
0.0001,
0.001,
LeakyReLU()
)
print("CTRL+C to interrupt training.")
@@ -91,8 +91,8 @@ def plot_random_reconstruction(
print(f'{code.tolist()}')
def mnist_test(model: str | AAutoencoder):
x_train, _, x_test, y_test = load_mnist()
def mnist_test(model: str | AAutoencoder | LabelingVAE):
x_train, y_train, x_test, y_test = load_mnist()
in_len = x_train[0].shape[0] * x_train[0].shape[0]
img_shape = x_train[0].shape
x_train.resize(x_train.shape[0], in_len)
@@ -107,6 +107,11 @@ def mnist_test(model: str | AAutoencoder):
print(autoencoder)
idx = np.random.randint(0, len(x_test))
example: np.ndarray = x_test[idx]
y_train = [str(int(i)) for i in y_train]
autoencoder.learn_labels(x_train, y_train, 5)
res = autoencoder.label(x_train[idx])
for k, v in res.items():
print(f"{k} => {v}")
plot_random_reconstruction(autoencoder, example, img_shape, y_test[idx])
if autoencoder.space_dim == 2:
plot_mnist_latent_space(autoencoder, x_test, y_test)
@@ -150,6 +155,6 @@ if __name__ == "__main__":
args.m,
args.e,
args.p,
VariationalAutoencoder
LabelingVAE
)
mnist_test(autoencoder)

View File

@@ -290,8 +290,11 @@ class LabelingVAE(VariationalAutoencoder):
for label in self.labels:
label.cache()
def label(self, x: np.ndarray):
y = self.encode(x)
def label(self, x: np.ndarray, samples=10):
y = np.zeros((samples, self.encoder.out_size))
for i in range(samples):
y[i] = self.encode(x)
y = np.mean(y, axis=0)
probs = {}
total = 0
for label in self.labels:
@@ -300,4 +303,10 @@ class LabelingVAE(VariationalAutoencoder):
total += p
for k in probs:
probs[k] = float(probs[k] / total)
return dict(sorted(probs.items()))
return dict(
sorted(
probs.items(),
key=lambda item: item[1],
reverse=True
)
)