From 3be5c54d2672c53e96d6ba2608e2144375c975ab Mon Sep 17 00:00:00 2001 From: Alec Helbling <alechelbling@gatech.edu> Date: Mon, 28 Mar 2022 14:01:00 -0400 Subject: [PATCH] Changed directory structure to accomodate examples as apposed to everything being a part of the core library. May need to rethink this in the future. Added some boilerplate for pip packaging to the .gitignore. --- .gitignore | 9 ++++++++- Readme.md | 8 ++++---- .../disentanglement}/disentanglement.py | 11 +++++++---- {src => examples/interpolation}/interpolation.py | 4 ++-- examples/{ => media}/DisentanglementScene.gif | Bin examples/{ => media}/DisentanglementScene.mp4 | Bin examples/{ => media}/ManimMLLogo.gif | Bin examples/{ => media}/NNImage.png | Bin examples/{ => media}/TestNeuralNetworkScene.gif | Bin examples/{ => media}/TestNeuralNetworkScene.mp4 | Bin examples/{ => media}/VAEImage.png | Bin examples/{ => media}/VAEScene.gif | Bin examples/{ => media}/VAEScene.mp4 | Bin .../autoencoder_models/.DS_Store | Bin .../autoencoder_models}/__init__.py | 0 .../data/MNIST/raw/t10k-images-idx3-ubyte | Bin .../data/MNIST/raw/t10k-images-idx3-ubyte.gz | Bin .../data/MNIST/raw/t10k-labels-idx1-ubyte | Bin .../data/MNIST/raw/t10k-labels-idx1-ubyte.gz | Bin .../data/MNIST/raw/train-images-idx3-ubyte | Bin .../data/MNIST/raw/train-images-idx3-ubyte.gz | Bin .../data/MNIST/raw/train-labels-idx1-ubyte | Bin .../data/MNIST/raw/train-labels-idx1-ubyte.gz | Bin .../autoencoder_models/disentanglement.pkl | Bin .../autoencoder_models/generate_disentanglement.py | 0 .../autoencoder_models/generate_images.py | 0 .../autoencoder_models/generate_interpolation.py | 0 .../autoencoder_models/image_pairs.pkl | Bin .../autoencoder_models/interpolations.pkl | Bin .../autoencoder_models/saved_models/model_dim16.pth | Bin .../autoencoder_models/saved_models/model_dim2.pth | Bin .../saved_models/model_dim2_cnn.pth | Bin .../autoencoder_models/saved_models/model_dim5.pth | Bin .../autoencoder_models/variational_autoencoder.py | 7 ++++++- .../variational_autoencoder.py | 6 +++--- {src/autoencoder_models => manim_ml}/__init__.py | 0 {src => manim_ml}/logo.py | 0 {src => manim_ml}/neural_network.py | 0 {src => manim_ml}/probability_embedding.py | 0 {src => manim_ml}/util.py | 0 40 files changed, 30 insertions(+), 15 deletions(-) rename {src => examples/disentanglement}/disentanglement.py (86%) rename {src => examples/interpolation}/interpolation.py (93%) rename examples/{ => media}/DisentanglementScene.gif (100%) rename examples/{ => media}/DisentanglementScene.mp4 (100%) rename examples/{ => media}/ManimMLLogo.gif (100%) rename examples/{ => media}/NNImage.png (100%) rename examples/{ => media}/TestNeuralNetworkScene.gif (100%) rename examples/{ => media}/TestNeuralNetworkScene.mp4 (100%) rename examples/{ => media}/VAEImage.png (100%) rename examples/{ => media}/VAEScene.gif (100%) rename examples/{ => media}/VAEScene.mp4 (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/.DS_Store (100%) rename {src => examples/variational_autoencoder/autoencoder_models}/__init__.py (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/disentanglement.pkl (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/generate_disentanglement.py (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/generate_images.py (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/generate_interpolation.py (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/image_pairs.pkl (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/interpolations.pkl (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/saved_models/model_dim16.pth (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/saved_models/model_dim2.pth (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/saved_models/model_dim2_cnn.pth (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/saved_models/model_dim5.pth (100%) rename {src => examples/variational_autoencoder}/autoencoder_models/variational_autoencoder.py (97%) rename {src => examples/variational_autoencoder}/variational_autoencoder.py (98%) rename {src/autoencoder_models => manim_ml}/__init__.py (100%) rename {src => manim_ml}/logo.py (100%) rename {src => manim_ml}/neural_network.py (100%) rename {src => manim_ml}/probability_embedding.py (100%) rename {src => manim_ml}/util.py (100%) diff --git a/.gitignore b/.gitignore index 6d38729..0bfd98c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,9 @@ +__pycache__ +manim_ml.egg-info/ +manim_ml/manim_ml.egg-info/ +dist +manim_ml/media media -__pycache__ \ No newline at end of file +pyproject.toml +setup.cfg +!examples/media \ No newline at end of file diff --git a/Readme.md b/Readme.md index b800299..425de04 100644 --- a/Readme.md +++ b/Readme.md @@ -1,6 +1,6 @@ # Manim Machine Learning <a href="https://github.com/helblazer811/ManimMachineLearning"> - <img src="examples/ManimMLLogo.gif"> + <img src="examples/media/ManimMLLogo.gif"> </a> [](https://github.com/helblazer811/ManimMachineLearning/blob/main/LICENSE.md) @@ -28,16 +28,16 @@ Checkout the ```examples``` directory for some example videos with source code. This is a visualization of a Variational Autoencoder. -<img src="examples/VAEScene.gif" width="600"> +<img src="examples/media/VAEScene.gif" width="600"> ### VAE Disentanglement This is a visualization of disentanglement with a Variational Autoencoder -<img src="examples/DisentanglementScene.gif" width="600"> +<img src="examples/media/DisentanglementScene.gif" width="600"> ### Neural Networks This is a visualization of a Neural Network. -<img src="examples/TestNeuralNetworkScene.gif" width="600"> +<img src="examples/media/TestNeuralNetworkScene.gif" width="600"> diff --git a/src/disentanglement.py b/examples/disentanglement/disentanglement.py similarity index 86% rename from src/disentanglement.py rename to examples/disentanglement/disentanglement.py index db72353..4aea487 100644 --- a/src/disentanglement.py +++ b/examples/disentanglement/disentanglement.py @@ -1,7 +1,10 @@ """This module is dedicated to visualizing VAE disentanglement""" +import sys +import os +sys.path.append(os.environ["PROJECT_ROOT"]) from manim import * -from neural_network import NeuralNetwork -import util +from manim_ml.neural_network import NeuralNetwork +import manim_ml.util as util import pickle class VAEDecoder(VGroup): @@ -19,11 +22,11 @@ class VAEDecoder(VGroup): class DisentanglementVisualization(VGroup): - def __init__(self, model_path="autoencoder_models/saved_models/model_dim2.pth", image_height=0.35): + def __init__(self, model_path=os.path.join(os.environ["PROJECT_ROOT"], "examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2.pth"), image_height=0.35): self.model_path = model_path self.image_height = image_height # Load disentanglement image objects - with open("autoencoder_models/disentanglement.pkl", "rb") as f: + with open(os.path.join(os.environ["PROJECT_ROOT"], "examples/variational_autoencoder/autoencoder_models/disentanglement.pkl"), "rb") as f: self.image_handler = pickle.load(f) def make_disentanglement_generation_animation(self): diff --git a/src/interpolation.py b/examples/interpolation/interpolation.py similarity index 93% rename from src/interpolation.py rename to examples/interpolation/interpolation.py index 2e11028..9928e87 100644 --- a/src/interpolation.py +++ b/examples/interpolation/interpolation.py @@ -6,8 +6,8 @@ sys.path.append(os.environ["PROJECT_ROOT"]) from manim import * import pickle import numpy as np -import neural_network -import variational_autoencoder +import manim_ml.neural_network as neural_network +import examples.variational_autoencoder.variational_autoencoder as variational_autoencoder """ The VAE Scene for the twitter video. diff --git a/examples/DisentanglementScene.gif b/examples/media/DisentanglementScene.gif similarity index 100% rename from examples/DisentanglementScene.gif rename to examples/media/DisentanglementScene.gif diff --git a/examples/DisentanglementScene.mp4 b/examples/media/DisentanglementScene.mp4 similarity index 100% rename from examples/DisentanglementScene.mp4 rename to examples/media/DisentanglementScene.mp4 diff --git a/examples/ManimMLLogo.gif b/examples/media/ManimMLLogo.gif similarity index 100% rename from examples/ManimMLLogo.gif rename to examples/media/ManimMLLogo.gif diff --git a/examples/NNImage.png b/examples/media/NNImage.png similarity index 100% rename from examples/NNImage.png rename to examples/media/NNImage.png diff --git a/examples/TestNeuralNetworkScene.gif b/examples/media/TestNeuralNetworkScene.gif similarity index 100% rename from examples/TestNeuralNetworkScene.gif rename to examples/media/TestNeuralNetworkScene.gif diff --git a/examples/TestNeuralNetworkScene.mp4 b/examples/media/TestNeuralNetworkScene.mp4 similarity index 100% rename from examples/TestNeuralNetworkScene.mp4 rename to examples/media/TestNeuralNetworkScene.mp4 diff --git a/examples/VAEImage.png b/examples/media/VAEImage.png similarity index 100% rename from examples/VAEImage.png rename to examples/media/VAEImage.png diff --git a/examples/VAEScene.gif b/examples/media/VAEScene.gif similarity index 100% rename from examples/VAEScene.gif rename to examples/media/VAEScene.gif diff --git a/examples/VAEScene.mp4 b/examples/media/VAEScene.mp4 similarity index 100% rename from examples/VAEScene.mp4 rename to examples/media/VAEScene.mp4 diff --git a/src/autoencoder_models/.DS_Store b/examples/variational_autoencoder/autoencoder_models/.DS_Store similarity index 100% rename from src/autoencoder_models/.DS_Store rename to examples/variational_autoencoder/autoencoder_models/.DS_Store diff --git a/src/__init__.py b/examples/variational_autoencoder/autoencoder_models/__init__.py similarity index 100% rename from src/__init__.py rename to examples/variational_autoencoder/autoencoder_models/__init__.py diff --git a/src/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte similarity index 100% rename from src/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte diff --git a/src/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz similarity index 100% rename from src/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz diff --git a/src/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte similarity index 100% rename from src/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte diff --git a/src/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz similarity index 100% rename from src/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz diff --git a/src/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte similarity index 100% rename from src/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte diff --git a/src/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz similarity index 100% rename from src/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz diff --git a/src/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte similarity index 100% rename from src/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte diff --git a/src/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz similarity index 100% rename from src/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz diff --git a/src/autoencoder_models/disentanglement.pkl b/examples/variational_autoencoder/autoencoder_models/disentanglement.pkl similarity index 100% rename from src/autoencoder_models/disentanglement.pkl rename to examples/variational_autoencoder/autoencoder_models/disentanglement.pkl diff --git a/src/autoencoder_models/generate_disentanglement.py b/examples/variational_autoencoder/autoencoder_models/generate_disentanglement.py similarity index 100% rename from src/autoencoder_models/generate_disentanglement.py rename to examples/variational_autoencoder/autoencoder_models/generate_disentanglement.py diff --git a/src/autoencoder_models/generate_images.py b/examples/variational_autoencoder/autoencoder_models/generate_images.py similarity index 100% rename from src/autoencoder_models/generate_images.py rename to examples/variational_autoencoder/autoencoder_models/generate_images.py diff --git a/src/autoencoder_models/generate_interpolation.py b/examples/variational_autoencoder/autoencoder_models/generate_interpolation.py similarity index 100% rename from src/autoencoder_models/generate_interpolation.py rename to examples/variational_autoencoder/autoencoder_models/generate_interpolation.py diff --git a/src/autoencoder_models/image_pairs.pkl b/examples/variational_autoencoder/autoencoder_models/image_pairs.pkl similarity index 100% rename from src/autoencoder_models/image_pairs.pkl rename to examples/variational_autoencoder/autoencoder_models/image_pairs.pkl diff --git a/src/autoencoder_models/interpolations.pkl b/examples/variational_autoencoder/autoencoder_models/interpolations.pkl similarity index 100% rename from src/autoencoder_models/interpolations.pkl rename to examples/variational_autoencoder/autoencoder_models/interpolations.pkl diff --git a/src/autoencoder_models/saved_models/model_dim16.pth b/examples/variational_autoencoder/autoencoder_models/saved_models/model_dim16.pth similarity index 100% rename from src/autoencoder_models/saved_models/model_dim16.pth rename to examples/variational_autoencoder/autoencoder_models/saved_models/model_dim16.pth diff --git a/src/autoencoder_models/saved_models/model_dim2.pth b/examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2.pth similarity index 100% rename from src/autoencoder_models/saved_models/model_dim2.pth rename to examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2.pth diff --git a/src/autoencoder_models/saved_models/model_dim2_cnn.pth b/examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2_cnn.pth similarity index 100% rename from src/autoencoder_models/saved_models/model_dim2_cnn.pth rename to examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2_cnn.pth diff --git a/src/autoencoder_models/saved_models/model_dim5.pth b/examples/variational_autoencoder/autoencoder_models/saved_models/model_dim5.pth similarity index 100% rename from src/autoencoder_models/saved_models/model_dim5.pth rename to examples/variational_autoencoder/autoencoder_models/saved_models/model_dim5.pth diff --git a/src/autoencoder_models/variational_autoencoder.py b/examples/variational_autoencoder/autoencoder_models/variational_autoencoder.py similarity index 97% rename from src/autoencoder_models/variational_autoencoder.py rename to examples/variational_autoencoder/autoencoder_models/variational_autoencoder.py index 229acd2..a3363c7 100644 --- a/src/autoencoder_models/variational_autoencoder.py +++ b/examples/variational_autoencoder/autoencoder_models/variational_autoencoder.py @@ -198,7 +198,12 @@ def train_model(latent_dim=16, plot=True, digit=1, epochs=200): losses.append(loss.detach().cpu()) outputs.append((epochs, image, reconstructed)) - torch.save(model.state_dict(), os.path.join(os.environ["PROJECT_ROOT"], f"saved_models/model_dim{latent_dim}.pth")) + torch.save(model.state_dict(), + os.path.join( + os.environ["PROJECT_ROOT"], + f"examples/variational_autoencoder/autoencoder_model/saved_models/model_dim{latent_dim}.pth" + ) + ) if plot: # Defining the Plot Style diff --git a/src/variational_autoencoder.py b/examples/variational_autoencoder/variational_autoencoder.py similarity index 98% rename from src/variational_autoencoder.py rename to examples/variational_autoencoder/variational_autoencoder.py index d6b4fb2..6322150 100644 --- a/src/variational_autoencoder.py +++ b/examples/variational_autoencoder/variational_autoencoder.py @@ -8,7 +8,7 @@ from manim import * import pickle import numpy as np import os -import neural_network +import manim_ml.neural_network as neural_network class VariationalAutoencoder(VGroup): """Variational Autoencoder Manim Visualization""" @@ -244,8 +244,8 @@ class MNISTImageHandler(): def __init__( self, - image_pairs_file_path=os.path.join(os.environ["PROJECT_ROOT"], "autoencoder_models/image_pairs.pkl"), - interpolations_file_path=os.path.join(os.environ["PROJECT_ROOT"], "autoencoder_models/interpolations.pkl") + image_pairs_file_path=os.path.join(os.environ["PROJECT_ROOT"], "examples/variational_autoencoder/autoencoder_models/image_pairs.pkl"), + interpolations_file_path=os.path.join(os.environ["PROJECT_ROOT"], "examples/variational_autoencoder/autoencoder_models/interpolations.pkl") ): self.image_pairs_file_path = image_pairs_file_path self.interpolations_file_path = interpolations_file_path diff --git a/src/autoencoder_models/__init__.py b/manim_ml/__init__.py similarity index 100% rename from src/autoencoder_models/__init__.py rename to manim_ml/__init__.py diff --git a/src/logo.py b/manim_ml/logo.py similarity index 100% rename from src/logo.py rename to manim_ml/logo.py diff --git a/src/neural_network.py b/manim_ml/neural_network.py similarity index 100% rename from src/neural_network.py rename to manim_ml/neural_network.py diff --git a/src/probability_embedding.py b/manim_ml/probability_embedding.py similarity index 100% rename from src/probability_embedding.py rename to manim_ml/probability_embedding.py diff --git a/src/util.py b/manim_ml/util.py similarity index 100% rename from src/util.py rename to manim_ml/util.py