Spaces:
Sleeping
Sleeping
| # Import dependencies | |
| import tensorflow as tf | |
| from tensorflow import keras | |
| import numpy as np | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| import gradio as gr | |
| import os | |
| (X_train_full, y_train_full), (X_test, y_test) = keras.datasets.mnist.load_data() | |
| class Sampling(tf.keras.layers.Layer): | |
| def call(self, inputs): | |
| mean, log_var = inputs | |
| return tf.random.normal(tf.shape(log_var)) * tf.exp(log_var / 2) + mean | |
| custom_objects = {'Sampling': Sampling} | |
| variational_ae = keras.models.load_model('./vae_autoencoder.keras', custom_objects=custom_objects) | |
| variational_encoder = keras.models.load_model('./vae_encoder.keras', custom_objects=custom_objects) | |
| variational_decoder = keras.models.load_model('./vae_decoder.keras', custom_objects=custom_objects) | |
| def get_center_of_mass(df): | |
| cms = [] | |
| labels = df.label.unique() | |
| for label in sorted(labels): | |
| cm = df[df.label == label][df.columns[:-1]].sum() / df[df.label == label].shape[0] | |
| cms.append(cm.values) | |
| return cms | |
| _, _, X_test_encoded = variational_encoder(X_test.reshape(-1, 28, 28, 1)) | |
| df = pd.concat([pd.DataFrame(X_test_encoded), pd.DataFrame(y_test, columns=['label'])], axis=1) | |
| cms = get_center_of_mass(df) | |
| imgs_cm = [np.clip(variational_decoder(cms[i].reshape(1, -1))[0], 0.0, 255.0) for i in range(10)] | |
| many = [] | |
| for i in range(10):#range(4, len(cms) - 5): | |
| A, B = cms[i - 1].copy(), cms[i].copy() | |
| versor = (B - A) / np.linalg.norm(B - A) | |
| d = np.linspace(0, np.linalg.norm(B - A), 100) | |
| for i in range(100): | |
| row = A + d[i] * versor | |
| many.append(row.copy()) | |
| many = tf.convert_to_tensor(tf.squeeze(np.array(many))) | |
| images = variational_decoder(many).numpy() | |
| images_converted = [] | |
| for x in images: | |
| new_x = ((x - x.min()) / (x - x.min()).max()) * 255 | |
| new_x = new_x.astype(np.uint8) | |
| images_converted.append(new_x) | |
| images_converted = np.array(images_converted) | |
| def image_classifier(value): | |
| return np.clip(((variational_decoder(many[(value * 10)].numpy().reshape(1, -1))[0]) * 255), 0, 255).astype(int)[:, :, 0] | |
| input_value_d = gr.Slider(minimum=2, maximum=99, step=1) | |
| demo = gr.Interface(fn=image_classifier, inputs=input_value_d, outputs="image", live=True) | |
| # Launch the interface | |
| if __name__ == "__main__": | |
| demo.launch() |