├── vae ├── __init__.py ├── loss.py ├── utils.py ├── model.py ├── callbacks.py └── train.py ├── requirements.txt ├── assets ├── VAE.001.jpeg ├── VAE.002.jpeg └── VAE.003.jpeg ├── config.py ├── train_config.json ├── .gitignore ├── README.md ├── LICENSE └── notebooks └── train_and_eval.ipynb /vae/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | torch 2 | torchvision 3 | matplotlib 4 | numpy 5 | scipy 6 | jupyterlab 7 | -------------------------------------------------------------------------------- /assets/VAE.001.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bvezilic/Variational-autoencoder/HEAD/assets/VAE.001.jpeg -------------------------------------------------------------------------------- /assets/VAE.002.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bvezilic/Variational-autoencoder/HEAD/assets/VAE.002.jpeg -------------------------------------------------------------------------------- /assets/VAE.003.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bvezilic/Variational-autoencoder/HEAD/assets/VAE.003.jpeg -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | PROJECT_ROOT = os.path.dirname(__file__) 4 | 5 | DATA_DIR = os.path.join(PROJECT_ROOT, "data") 6 | MODELS_DIR = os.path.join(PROJECT_ROOT, "trained_model") 7 | -------------------------------------------------------------------------------- /train_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "epochs": 20, 3 | "batch_size": 64, 4 | "lr": 0.001, 5 | "save_path": "hs-512_ls-20.pt", 6 | "model_params": { 7 | "input_size": 784, 8 | "hidden_size": 512, 9 | "latent_size": 20 10 | } 11 | } -------------------------------------------------------------------------------- /vae/loss.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn.functional as F 3 | 4 | 5 | def loss_criterion(inputs, targets, logvar, mu): 6 | # Reconstruction loss 7 | bce_loss = F.binary_cross_entropy(inputs, targets, reduction="sum") 8 | # Regularization term 9 | kl_loss = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp()) 10 | 11 | return bce_loss + kl_loss 12 | -------------------------------------------------------------------------------- /vae/utils.py: -------------------------------------------------------------------------------- 1 | import os 2 | import torch 3 | import torch.nn as nn 4 | 5 | from vae.model import VAE 6 | 7 | 8 | def save_checkpoint(model, optimizer, path): 9 | if not os.path.exists(os.path.dirname(path)): 10 | print("Creating directories on path: `{}`".format(path)) 11 | os.makedirs(os.path.dirname(path)) 12 | 13 | torch.save({ 14 | "model_state_dict": model.state_dict(), 15 | "optimizer_state_dict": optimizer.state_dict(), 16 | "model": { 17 | "input_size": model.input_size, 18 | "hidden_size": model.hidden_size, 19 | "latent_size": model.latent_size 20 | } 21 | }, path) 22 | 23 | 24 | def load_checkpoint(path): 25 | checkpoint = torch.load(path) 26 | 27 | model = VAE(**checkpoint["model"]) 28 | model.load_state_dict(checkpoint["model_state_dict"]) 29 | 30 | optimizer = nn.Adam(model.parameters()) 31 | optimizer.load_state_dict(checkpoint["optimizer_state_dict"]) 32 | 33 | return model, optimizer 34 | 35 | 36 | def save_model(model, path): 37 | if not os.path.exists(os.path.dirname(path)): 38 | print("Creating directories on path: `{}`".format(path)) 39 | os.makedirs(os.path.dirname(path)) 40 | 41 | torch.save({ 42 | "model_state_dict": model.state_dict(), 43 | "model": { 44 | "input_size": model.input_size, 45 | "hidden_size": model.hidden_size, 46 | "latent_size": model.latent_size 47 | } 48 | }, path) 49 | 50 | 51 | def load_model(path): 52 | restore_dict = torch.load(path) 53 | 54 | model = VAE(**restore_dict["model"]) 55 | model.load_state_dict(restore_dict["model_state_dict"]) 56 | model.eval() 57 | 58 | return model 59 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | 106 | # PyCharm 107 | .idea/ 108 | 109 | # Config files 110 | config.json -------------------------------------------------------------------------------- /vae/model.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.nn.functional as F 4 | 5 | 6 | class Encoder(nn.Module): 7 | def __init__(self, input_size, hidden_size): 8 | super().__init__() 9 | self.fc1 = nn.Linear(input_size, hidden_size) 10 | self.fc2 = nn.Linear(hidden_size, hidden_size) 11 | 12 | def forward(self, x): 13 | p_x = F.relu(self.fc1(x)) 14 | p_x = F.relu(self.fc2(p_x)) 15 | 16 | return p_x 17 | 18 | 19 | class LatentZ(nn.Module): 20 | def __init__(self, hidden_size, latent_size): 21 | super().__init__() 22 | self.mu = nn.Linear(hidden_size, latent_size) 23 | self.logvar = nn.Linear(hidden_size, latent_size) 24 | 25 | def forward(self, p_x): 26 | mu = self.mu(p_x) 27 | logvar = self.logvar(p_x) 28 | 29 | std = torch.exp(0.5*logvar) 30 | eps = torch.randn_like(std) 31 | 32 | return std * eps + mu, logvar, mu 33 | 34 | 35 | class Decoder(nn.Module): 36 | def __init__(self, latent_size, hidden_size, input_size): 37 | super().__init__() 38 | self.fc1 = nn.Linear(latent_size, hidden_size) 39 | self.fc2 = nn.Linear(hidden_size, input_size) 40 | 41 | def forward(self, z_x): 42 | q_x = F.relu(self.fc1(z_x)) 43 | q_x = torch.sigmoid(self.fc2(q_x)) 44 | 45 | return q_x 46 | 47 | 48 | class VAE(nn.Module): 49 | def __init__(self, input_size, hidden_size, latent_size=2): 50 | super().__init__() 51 | self.input_size = input_size 52 | self.hidden_size = hidden_size 53 | self.latent_size = latent_size 54 | 55 | self.encoder = Encoder(input_size, hidden_size) 56 | self.latent_z = LatentZ(hidden_size, latent_size) 57 | self.decoder = Decoder(latent_size, hidden_size, input_size) 58 | 59 | def forward(self, x): 60 | p_x = self.encoder(x) 61 | z, logvar, mu = self.latent_z(p_x) 62 | q_z = self.decoder(z) 63 | 64 | return q_z, logvar, mu, z 65 | -------------------------------------------------------------------------------- /vae/callbacks.py: -------------------------------------------------------------------------------- 1 | import os 2 | import numpy as np 3 | import torch 4 | import matplotlib.pyplot as plt 5 | 6 | 7 | class PlotCallback: 8 | """Callback class that retrieves several samples and displays model reconstructions""" 9 | def __init__(self, num_samples=4, save_dir=None): 10 | self.num_samples = num_samples 11 | self.save_dir = save_dir 12 | self.counter = 0 13 | 14 | if self.save_dir and not os.path.exists(self.save_dir): 15 | os.makedirs(self.save_dir) 16 | 17 | def __call__(self, trainer): 18 | trainer.model.eval() # Set model to eval mode due to Dropout, BN, etc. 19 | with torch.no_grad(): 20 | inputs = self._batch_random_samples(trainer) 21 | outputs, _, _, z = trainer.model(inputs) # Forward pass 22 | 23 | # Prepare data for plotting 24 | input_images = self._reshape_to_image(inputs, numpy=True) 25 | recon_images = self._reshape_to_image(outputs, numpy=True) 26 | z_ = self._to_numpy(z) 27 | 28 | self._plot_samples(input_images, recon_images, z_) 29 | 30 | trainer.model.train() # Return to train mode 31 | 32 | def _batch_random_samples(self, trainer): 33 | """Helper function that retrieves `num_samles` from dataset and prepare them in batch for model """ 34 | dataset = trainer.data_loader.dataset 35 | 36 | ids = np.random.randint(len(dataset), size=self.num_samples) 37 | samples = [dataset[idx][0] for idx in ids] # Each data point is (image, class) 38 | 39 | # Create batch 40 | batch = torch.stack(samples) 41 | batch = batch.view(batch.size(0), -1) # Flatten 42 | batch = batch.to(trainer.device) 43 | 44 | return batch 45 | 46 | def _reshape_to_image(self, tensor, numpy=True): 47 | """Helper function that converts image-vector into image-matrix.""" 48 | images = tensor.reshape(-1, 28, 28) 49 | if numpy: 50 | images = self._to_numpy(images) 51 | 52 | return images 53 | 54 | def _to_numpy(self, tensor): 55 | """Helper function that converts tensor to numpy""" 56 | return tensor.cpu().numpy() 57 | 58 | def _plot_samples(self, input_images, recon_images, z): 59 | """Creates plot figure and saves it on disk if save_dir is passed.""" 60 | fig, ax_lst = plt.subplots(self.num_samples, 3) 61 | fig.suptitle("Input → Latent Z → Reconstructed") 62 | 63 | for i in range(self.num_samples): 64 | # Images 65 | ax_lst[i][0].imshow(input_images[i], cmap="gray") 66 | ax_lst[i][0].set_axis_off() 67 | 68 | # Variable z 69 | ax_lst[i][1].bar(np.arange(len(z[i])), z[i]) 70 | 71 | # Reconstructed images 72 | ax_lst[i][2].imshow(recon_images[i], cmap="gray") 73 | ax_lst[i][2].set_axis_off() 74 | 75 | fig.tight_layout() 76 | 77 | if self.save_dir: 78 | fig.savefig(self.save_dir + "/results_{}.png".format(self.counter)) 79 | plt.close(fig) 80 | self.counter += 1 81 | else: 82 | plt.show(fig) 83 | -------------------------------------------------------------------------------- /vae/train.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | from torch.optim import Adam 4 | from torch.utils.data.dataloader import DataLoader 5 | from torchvision.datasets import MNIST 6 | from torchvision.transforms import ToTensor 7 | 8 | from vae.callbacks import PlotCallback 9 | from vae.loss import loss_criterion 10 | from vae.model import VAE 11 | from vae.utils import load_checkpoint, save_checkpoint 12 | from config import * 13 | 14 | 15 | class Trainer: 16 | def __init__(self, model, data_loader, optimizer, device, callbacks=[]): 17 | self.model = model 18 | self.data_loader = data_loader 19 | self.optimizer = optimizer 20 | self.device = device 21 | self.callbacks = callbacks 22 | 23 | def run_train_loop(self, epochs): 24 | self.model.to(self.device) # Set model params to cpu/gpu 25 | self.model.train() # Set model to train mode 26 | 27 | losses = [] 28 | for epoch in range(1, epochs+1): 29 | print("-" * 20) 30 | print("Epoch {}".format(epoch)) 31 | 32 | running_loss = 0 33 | for inputs, _ in self.data_loader: 34 | self.optimizer.zero_grad() 35 | 36 | # Prepare inputs and targets 37 | x = inputs.view(inputs.size(0), -1).to(self.device) 38 | y = (x > 0.5).float().to(self.device) 39 | 40 | # Forward pass 41 | y_hat, logvar, mu, _ = self.model(x) 42 | 43 | # Compute loss 44 | loss = loss_criterion(y_hat, y, logvar, mu) 45 | 46 | # Compute gradients and update weights 47 | loss.backward() 48 | self.optimizer.step() 49 | 50 | running_loss += loss 51 | 52 | epoch_loss = running_loss / len(self.data_loader) 53 | losses.append(epoch_loss.item()) 54 | print("Loss: {:.4f}".format(epoch_loss)) 55 | 56 | # On end of epoch call any callbacks 57 | if self.callbacks: 58 | [fn(self) for fn in self.callbacks] 59 | 60 | return losses 61 | 62 | 63 | def train(): 64 | # Initialize config file 65 | config = json.load(open(args.config, "r")) 66 | 67 | # Load data set 68 | dataset = MNIST(root="data", transform=ToTensor(), download=True) 69 | 70 | # Create data loader 71 | data_loader = DataLoader(dataset=dataset, batch_size=config["batch_size"]) 72 | 73 | # Load from checkpoint if passed 74 | if args.resume: 75 | model, optimizer = load_checkpoint(os.path.join(MODELS_DIR, args.resume)) 76 | else: 77 | # Initialize model 78 | model = VAE(**config["model_params"]) 79 | 80 | # Initialize optimizer 81 | optimizer = Adam(model.parameters(), lr=config["lr"]) 82 | 83 | # Initialize trainer 84 | trainer = Trainer(model=model, 85 | data_loader=data_loader, 86 | optimizer=optimizer, 87 | device=args.device, 88 | callbacks=[PlotCallback(save_dir=PROJECT_ROOT + "/images")]) 89 | 90 | # Run training 91 | trainer.run_train_loop(config["epochs"]) 92 | 93 | # Save model 94 | save_checkpoint(model, optimizer, path=os.path.join(MODELS_DIR, config["save_path"])) 95 | 96 | 97 | if __name__ == "__main__": 98 | import argparse 99 | 100 | parser = argparse.ArgumentParser() 101 | parser.add_argument("--device", default="cuda", choices=["cuda", "cpu"], 102 | help="Device on which to run training") 103 | parser.add_argument("--resume", default=None, 104 | help="Path to .pt model") 105 | parser.add_argument("--config", default="train_config.json", 106 | help="Path to config file") 107 | 108 | args = parser.parse_args() 109 | train() 110 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Variational Autoencoder 2 | 3 | This is another PyTorch implementation of Variational Autoencoder (VAE) trained on MNIST dataset. The goal of this exercise is to get more familiar with older generative models such as the family of autoencoders. 4 | 5 | ### Model 6 | 7 | The model consists of usual Encoder-Decoder architecture: 8 | 9 | ![vae](assets/VAE.001.jpeg) 10 | 11 | Encoder and Decoder are standard 2-layer Feed-Forward Networks, however, what is exactly happening in the 12 | middle section with the *latent variable*? 13 | 14 | ![latent-variable](assets/VAE.002.jpeg) 15 | 16 | Two linear (dense) layers will represent **mean** and **log-variance**. These layer will use encoders output as input and 17 | will produce `mu` and `logvar` vectors. From these vectors latent variable `z` is computed as shown in picture above. 18 | 19 | 1. Compute standard deviation (`std`) from `logvar` 20 | 2. Sample from the normal distribution to get `eps` and mutiply it with `std` 21 | 3. Add mean (`mu`) 22 | 23 | This way of computing `z` in the paper is called **parameterization trick** without which backpropagation wouldn't be possible. 24 | 25 | Upper-mentioned formula for deriving `logvar` from standard deviation can be seen below. 26 | Since standard deviation (sigma) is the square root of the variance the formula can be slightly re-written like: 27 | 28 | ![std](assets/VAE.003.jpeg) 29 | 30 | > I am not sure why log-variance is chosen to represent standard deviation. My assumption is that log has some better 31 | > properties but also fits better with the regularization term since lowering `logvar` to zero, means `std` will be 1. 32 | > Which means we got normal distribution. (mean=0, std=1) 33 | 34 | Code-wise from [model.py](vae/model.py): 35 | 36 | ```python 37 | class LatentZ(nn.Module): 38 | def __init__(self, hidden_size, latent_size): 39 | super().__init__() 40 | self.mu = nn.Linear(hidden_size, latent_size) 41 | self.logvar = nn.Linear(hidden_size, latent_size) 42 | 43 | def forward(self, p_x): 44 | mu = self.mu(p_x) 45 | logvar = self.logvar(p_x) 46 | 47 | std = torch.exp(0.5*logvar) 48 | eps = torch.randn_like(std) 49 | 50 | return std * eps + mu, logvar, mu 51 | ``` 52 | 53 | A couple of differences compared to the original paper, *sigmoid* activations are replaced by *relu*. And instead of 54 | *SGD*, *Adam* optimizer was used. 55 | 56 | ### Loss 57 | 58 | The loss function consists of two terms. Reconstruction loss, for which was used `binary_cross_entropy`, in the paper was used *mean squared error*. And regularization loss or Kullback–Leibler divergence that will force `z` to be a normal distribution with *mean=0* and *std=1*. 59 | 60 | ```python 61 | def loss_criterion(inputs, targets, logvar, mu): 62 | # Reconstruction loss 63 | bce_loss = F.binary_cross_entropy(inputs, targets, reduction="sum") 64 | # Regularization term 65 | kl_loss = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp()) 66 | 67 | return bce_loss + kl_loss 68 | ``` 69 | 70 | If `mu` and `logvar` were singular values, instead of vectors, plotting a regularization term would look something like this: 71 | 72 | ![reg_loss](https://user-images.githubusercontent.com/16206648/51078157-5c980580-16b1-11e9-863c-52f3183f7a0d.gif) 73 | 74 | Keep in mind that graph shows `m` as mean and `l` as logvar. Reducing this loss will push *m* and *l* to be 0. 75 | And when **logvar=0** then **std = e^(0.5\*logvar) = e^(0.5\*0) = 1**. 76 | 77 | ### Issues 78 | 79 | One interesting thing that happened in my initial attempts is that I would get these kinds of results no matter how long 80 | the training persisted. 81 | 82 | ![wrong](https://user-images.githubusercontent.com/16206648/51078424-03ca6c00-16b5-11e9-9727-eb73447e52ae.png) 83 | 84 | When leaving the `reduction` parameter in `binary_cross_entropy` to its default value of `average`-ing loss per batch, the 85 | loss would always stay the same and the all images would become a blob of all number combined. Changing reduction 86 | parameter to `sum` fixed the issue where model can properly reconstruct images. Examples can be seen in notebooks. 87 | 88 | ### Notebooks 89 | Example training and samples can be seen in [notebook](notebooks/train_and_eval.ipynb). 90 | 91 | Visualization of generated samples as 2-dimensional manifold can be seen in [notebook](notebooks/visualizing_manifold.ipynb) 92 | 93 | 94 | ### Resources 95 | Original paper: 96 | * [Auto-Encoding Variational Bayes](https://arxiv.org/abs/1312.6114) 97 | 98 | Helpful GitHub repositories: 99 | 100 | * https://github.com/wiseodd/generative-models 101 | * https://github.com/bhpfelix/Variational-Autoencoder-PyTorch 102 | 103 | Tutorial: 104 | * https://jaan.io/what-is-variational-autoencoder-vae-tutorial/ 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /notebooks/train_and_eval.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "# Fix PYTHONPATH to point `vae` directory as root\n", 10 | "import sys\n", 11 | "from pathlib import Path\n", 12 | "\n", 13 | "cwd = Path(\".\").resolve()\n", 14 | "print(f\"Current directory: {cwd.resolve()}\")\n", 15 | "vae_rootdir = cwd.parent\n", 16 | "print(f\"VAE root directory: {vae_rootdir}\")\n", 17 | "\n", 18 | "sys.path.append(str(vae_rootdir))" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": {}, 24 | "source": [ 25 | "# Variational Autoecoder" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "Now we can do the rest of the imports" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "%matplotlib inline\n", 42 | "import json\n", 43 | "\n", 44 | "import numpy as np\n", 45 | "import matplotlib.pyplot as plt\n", 46 | "from torch.optim import Adam\n", 47 | "from torch.utils.data.dataloader import DataLoader\n", 48 | "from torchvision.datasets import MNIST\n", 49 | "from torchvision.transforms import ToTensor\n", 50 | "\n", 51 | "from vae.callbacks import PlotCallback\n", 52 | "from vae.loss import loss_criterion\n", 53 | "from vae.model import VAE\n", 54 | "from vae.train import Trainer\n", 55 | "from vae.utils import load_model, save_model\n", 56 | "from config import *" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": {}, 62 | "source": [ 63 | "Let's set training and model parameters" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 3, 69 | "metadata": {}, 70 | "outputs": [], 71 | "source": [ 72 | "# Training params\n", 73 | "batch_size = 64\n", 74 | "lr = 0.001\n", 75 | "device = \"cuda\"\n", 76 | "\n", 77 | "# Model params\n", 78 | "input_size = 784\n", 79 | "hidden_size = 512\n", 80 | "latent_size = 10" 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": {}, 86 | "source": [ 87 | "Load data set and create data loader" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 4, 93 | "metadata": {}, 94 | "outputs": [], 95 | "source": [ 96 | "# Load data set\n", 97 | "dataset = MNIST(DATA_DIR, transform=ToTensor(), download=True)\n", 98 | "\n", 99 | "# Create data loader\n", 100 | "data_loader = DataLoader(dataset=dataset, batch_size=batch_size)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "Initialize model and optimizer" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 5, 113 | "metadata": {}, 114 | "outputs": [], 115 | "source": [ 116 | "# Initialize model\n", 117 | "model = VAE(input_size, hidden_size, latent_size)\n", 118 | "\n", 119 | "# Initialize optimizer\n", 120 | "optimizer = Adam(model.parameters(), lr=lr)" 121 | ] 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "Now that we have our dataset, model and optimizer ready, only that's left is to initialize it in `Trainer` and run training." 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 6, 133 | "metadata": {}, 134 | "outputs": [], 135 | "source": [ 136 | "# Initialize trainer\n", 137 | "trainer = Trainer(model=model,\n", 138 | " data_loader=data_loader,\n", 139 | " optimizer=optimizer,\n", 140 | " device=device)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": {}, 146 | "source": [ 147 | "Run training for number of epochs." 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": null, 153 | "metadata": {}, 154 | "outputs": [], 155 | "source": [ 156 | "losses = trainer.run_train_loop(epochs=20)" 157 | ] 158 | }, 159 | { 160 | "cell_type": "markdown", 161 | "metadata": {}, 162 | "source": [ 163 | "Plot losses during training" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 8, 169 | "metadata": {}, 170 | "outputs": [ 171 | { 172 | "data": { 173 | "image/png": "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1eKZZ55BZmZmvftsynehJdzs3I4aNapW3XFxcTfdry2e25sda13fX5lMhvfee++G+7TV89qcGIia2XfffYepU6fizTffxP79+9GrVy/ExsYiJyenzva///47nnjiCYwdOxYHDhzA8OHDMXz4cBw9erSFK2+cHTt2YNKkSfjjjz+QnJyMyspKxMTEoLi4uN7tlEolsrKyxFd6enoLVXzrunXrZlH7rl27btjWXs8rAOzbt8/iOJOTkwEAjz322A23sZfzWlxcjF69euHTTz+tc/2CBQuwcOFCLF68GHv27IGnpydiY2NRVlZ2w3029jvfkuo73pKSEuzfvx8zZ87E/v378eOPP+LkyZN4+OGHb7rfxnwXWsrNzi0AxMXFWdS9evXqevdpq+f2Zsd6/TFmZWXhq6++gkwmQ0JCQr37tcXz2qwEalZ33nmnMGnSJPG90WgUtFqtMH/+/DrbP/7448LQoUMtlkVGRgrPPfdcs9ZpbTk5OQIAYceOHTdss3TpUkGlUrVcUVb05ptvCr169Wpw+9ZyXgVBEF566SUhPDxcMJlMda631/MKQPjpp5/E9yaTSVCr1cJ7770nLtPr9YJCoRBWr159w/009jsvlb8eb1327t0rABDS09Nv2Kax3wUp1HWsI0eOFIYNG9ao/djDuW3IeR02bJhw33331dvGHs6rtbGHqBlVVFQgNTUV0dHR4jK5XI7o6GikpKTUuU1KSopFewCIjY29YXtbVVBQAADw8/Ort11RURFCQ0MREhKCYcOGIS0trSXKs4rTp09Dq9WiQ4cOSExMREZGxg3btpbzWlFRgRUrVmDMmDH1PujYns+r2fnz56HT6SzOm0qlQmRk5A3PW1O+87asoKAAMpkMPj4+9bZrzHfBlmzfvh1BQUGIiIjAxIkTkZube8O2reXcZmdnY/369Rg7duxN29rreW0qBqJmdPXqVRiNRgQHB1ssDw4Ohk6nq3MbnU7XqPa2yGQyYcqUKRgwYAC6d+9+w3YRERH46quv8L///Q8rVqyAyWRC//79cenSpRastmkiIyOxbNkybNy4EUlJSTh//jwGDhyIwsLCOtu3hvMKAGvWrIFer8eoUaNu2Maez+v1zOemMeetKd95W1VWVoZp06bhiSeeqPfhn439LtiKuLg4fP3119iyZQveffdd7NixA/Hx8TAajXW2by3ndvny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", 174 | "text/plain": [ 175 | "
" 176 | ] 177 | }, 178 | "metadata": {}, 179 | "output_type": "display_data" 180 | } 181 | ], 182 | "source": [ 183 | "plt.plot(np.arange(len(losses)), losses)\n", 184 | "plt.title(\"Training\")\n", 185 | "plt.xlabel('Epochs')\n", 186 | "plt.ylabel('Loss')\n", 187 | "plt.show()" 188 | ] 189 | }, 190 | { 191 | "cell_type": "markdown", 192 | "metadata": {}, 193 | "source": [ 194 | "Even though it's used as a callback to plot samples during training, it can be used to generate samples aside from the train loop." 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 9, 200 | "metadata": {}, 201 | "outputs": [ 202 | { 203 | "data": { 204 | "image/png": "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+/bpT38avb29+OY3vyl/Qc+k//2//zcURcHPfvYzNDU1Tesaer0en//853HgwAF8//vfB3Dq3g0MDOAb3/jGpPNTqRQSiQSAU+M8dDod/vIv/3JS64n42W3YsAFGoxF///d/X/bz/OY3v4lIJIKPfexj51zmiV1BRqMRy5cvh6ZpyOVyAM79ZwWcClFVVSeNt3jyySfLPvb5fLj22mvx9NNPo7e3t+xzpe/xTGW47bbboKoqtm/fPqklSNM0+f7WrFkDn8+HHTt2IJvNynOeffZZrlJXA1hTv8AtXLgQV199Ne677z5kMhk8/vjjqK+vL2te/vSnP43HHnsMGzduxN13342RkRHs2LEDK1asQDQaledZLBYsX74czz33HBYvXoy6ujpcdNFF0+4j/PrXv45UKnVOg3d27dp12ib9W2+9FTfccAOMRiNuvvlm3HvvvYjH4/jGN76BhoYGDA0NlZ2/evVqPPXUU/jiF7+IhQsXoqGhAddffz3+9E//FP/xH/+B3/qt38Jdd92F1atXI5FI4N1338V3vvMdnDhxQk4zmqrVq1cDAP7kT/4EGzduhKqqZ2zF2LFjB773ve/hkksuQTKZxD//8z+f9ryPfvSj06phA6ea5++///7zXpXurrvuwkMPPYQvfelLuPXWW/Hf/tt/w/PPP48/+qM/wksvvYQPfehDKBQKOHjwIJ5//nm8+OKLWLNmDRYuXIg///M/xxe+8AVcc801uO2222AymfDGG2+gubkZjz76KHw+H7Zu3Yrt27fjxhtvxC233IJDhw7hySefxOWXX142KG6qbrjhBjQ2NuJDH/oQ/H4/Dhw4gK997Wv42Mc+Jh8qxc/qz//8z/HJT34SBoMBN99881lbkVwuF37v934PX/3qV2WLxQ9/+MNJ4y8A4O///u9x9dVX47LLLsNnPvMZLFiwACdOnMALL7yAvXv3nrUM3d3d+OIXv4itW7fixIkTuPXWW+FwONDT04Pvfve7+MxnPoMHHngABoMBX/ziF3Hvvffi+uuvx+23346enh4888wz7FOvBRUZc08z4kxT2mw226Rzt23bVjZtqnQK2N/+7d9qbW1tmslk0q655hrt7bffnvT1//zP/6x1dXVpRqNRW7Vqlfbiiy9OmtKmaZr2q1/9Slu9erVmNBpndHrbBxHv50yvb33rW5qmadp//Md/aJdc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", 205 | "text/plain": [ 206 | "
" 207 | ] 208 | }, 209 | "metadata": {}, 210 | "output_type": "display_data" 211 | }, 212 | { 213 | "data": { 214 | "image/png": "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", 215 | "text/plain": [ 216 | "
" 217 | ] 218 | }, 219 | "metadata": {}, 220 | "output_type": "display_data" 221 | } 222 | ], 223 | "source": [ 224 | "plot_cb = PlotCallback()\n", 225 | "for _ in range(2):\n", 226 | " plot_cb(trainer)" 227 | ] 228 | } 229 | ], 230 | "metadata": { 231 | "kernelspec": { 232 | "display_name": "Python 3 (ipykernel)", 233 | "language": "python", 234 | "name": "python3" 235 | }, 236 | "language_info": { 237 | "codemirror_mode": { 238 | "name": "ipython", 239 | "version": 3 240 | }, 241 | "file_extension": ".py", 242 | "mimetype": "text/x-python", 243 | "name": "python", 244 | "nbconvert_exporter": "python", 245 | "pygments_lexer": "ipython3", 246 | "version": "3.11.3" 247 | } 248 | }, 249 | "nbformat": 4, 250 | "nbformat_minor": 4 251 | } 252 | --------------------------------------------------------------------------------