{"cells": [{"cell_type": "markdown", "id": "fcc3a1f1", "metadata": {"papermill": {"duration": 0.010714, "end_time": "2023-03-14T15:58:52.555574", "exception": false, "start_time": "2023-03-14T15:58:52.544860", "status": "completed"}, "tags": []}, "source": ["\n", "# Tutorial 7: Deep Energy-Based Generative Models\n", "\n", "* **Author:** Phillip Lippe\n", "* **License:** CC BY-SA\n", "* **Generated:** 2023-03-14T15:57:19.480351\n", "\n", "In this tutorial, we will look at energy-based deep learning models, and focus on their application as generative models.\n", "Energy models have been a popular tool before the huge deep learning hype around 2012 hit.\n", "However, in recent years, energy-based models have gained increasing attention because of improved training methods and tricks being proposed.\n", "Although they are still in a research stage, they have shown to outperform strong Generative Adversarial Networks\n", "in certain cases which have been the state of the art of generating images\n", "([blog post](https://ajolicoeur.wordpress.com/the-new-contender-to-gans-score-matching-with-langevin-sampling/)about strong energy-based models,\n", "[blog post](https://medium.com/syncedreview/nvidia-open-sources-hyper-realistic-face-generator-stylegan-f346e1a73826) about the power of GANs).\n", "Hence, it is important to be aware of energy-based models, and as the theory can be abstract sometimes,\n", "we will show the idea of energy-based models with a lot of examples.\n", "This notebook is part of a lecture series on Deep Learning at the University of Amsterdam.\n", "The full list of tutorials can be found at https://uvadlc-notebooks.rtfd.io.\n", "\n", "\n", "---\n", "Open in [![Open In Colab](data:image/png;base64,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){height=\"20px\" width=\"117px\"}](https://colab.research.google.com/github/PytorchLightning/lightning-tutorials/blob/publication/.notebooks/course_UvA-DL/07-deep-energy-based-generative-models.ipynb)\n", "\n", "Give us a \u2b50 [on Github](https://www.github.com/Lightning-AI/lightning/)\n", "| Check out [the documentation](https://pytorch-lightning.readthedocs.io/en/stable/)\n", "| Join us [on Slack](https://www.pytorchlightning.ai/community)"]}, {"cell_type": "markdown", "id": "818fed51", "metadata": {"papermill": {"duration": 0.007631, "end_time": "2023-03-14T15:58:52.570190", "exception": false, "start_time": "2023-03-14T15:58:52.562559", "status": "completed"}, "tags": []}, "source": ["## Setup\n", "This notebook requires some packages besides pytorch-lightning."]}, {"cell_type": "code", "execution_count": 1, "id": "3c52da86", "metadata": {"colab": {}, "colab_type": "code", "execution": {"iopub.execute_input": "2023-03-14T15:58:52.614200Z", "iopub.status.busy": "2023-03-14T15:58:52.613288Z", "iopub.status.idle": "2023-03-14T15:58:56.051567Z", "shell.execute_reply": "2023-03-14T15:58:56.050328Z"}, "id": "LfrJLKPFyhsK", "lines_to_next_cell": 0, "papermill": {"duration": 3.450241, "end_time": "2023-03-14T15:58:56.055161", "exception": false, "start_time": "2023-03-14T15:58:52.604920", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\r\n", "\u001b[0m"]}], "source": ["! pip install --quiet \"torch>=1.8.1, <1.14.0\" \"pytorch-lightning>=1.4, <2.0.0\" \"lightning>=2.0.0rc0\" \"setuptools==67.4.0\" \"tensorboard\" \"torchvision\" \"matplotlib\" \"ipython[notebook]>=8.0.0, <8.12.0\" \"torchmetrics>=0.7, <0.12\""]}, {"cell_type": "markdown", "id": "4d022ac7", "metadata": {"papermill": {"duration": 0.006836, "end_time": "2023-03-14T15:58:56.074281", "exception": false, "start_time": "2023-03-14T15:58:56.067445", "status": "completed"}, "tags": []}, "source": ["
\n", "First, let's import our standard libraries below."]}, {"cell_type": "code", "execution_count": 2, "id": "735629d7", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:58:56.090307Z", "iopub.status.busy": "2023-03-14T15:58:56.089916Z", "iopub.status.idle": "2023-03-14T15:58:58.658854Z", "shell.execute_reply": "2023-03-14T15:58:58.657511Z"}, "papermill": {"duration": 2.580302, "end_time": "2023-03-14T15:58:58.661595", "exception": false, "start_time": "2023-03-14T15:58:56.081293", "status": "completed"}, "tags": []}, "outputs": [{"name": "stderr", "output_type": "stream", "text": ["Global seed set to 42\n"]}], "source": ["# Standard libraries\n", "import os\n", "import random\n", "import urllib.request\n", "from urllib.error import HTTPError\n", "\n", "# PyTorch Lightning\n", "import lightning as L\n", "\n", "# Plotting\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "import matplotlib_inline.backend_inline\n", "import numpy as np\n", "\n", "# PyTorch\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "import torch.utils.data as data\n", "\n", "# Torchvision\n", "import torchvision\n", "from lightning.pytorch.callbacks import Callback, LearningRateMonitor, ModelCheckpoint\n", "from torchvision import transforms\n", "from torchvision.datasets import MNIST\n", "\n", "matplotlib_inline.backend_inline.set_matplotlib_formats(\"svg\", \"pdf\") # For export\n", "matplotlib.rcParams[\"lines.linewidth\"] = 2.0\n", "\n", "# Path to the folder where the datasets are/should be downloaded (e.g. CIFAR10)\n", "DATASET_PATH = os.environ.get(\"PATH_DATASETS\", \"data\")\n", "# Path to the folder where the pretrained models are saved\n", "CHECKPOINT_PATH = os.environ.get(\"PATH_CHECKPOINT\", \"saved_models/tutorial8\")\n", "\n", "# Setting the seed\n", "L.seed_everything(42)\n", "\n", "# Ensure that all operations are deterministic on GPU (if used) for reproducibility\n", "torch.backends.cudnn.deterministic = True\n", "torch.backends.cudnn.benchmark = False\n", "\n", "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")"]}, {"cell_type": "markdown", "id": "d0166f69", "metadata": {"papermill": {"duration": 0.006971, "end_time": "2023-03-14T15:58:58.681582", "exception": false, "start_time": "2023-03-14T15:58:58.674611", "status": "completed"}, "tags": []}, "source": ["We also have pre-trained models that we download below."]}, {"cell_type": "code", "execution_count": 3, "id": "fd98fb91", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:58:58.698105Z", "iopub.status.busy": "2023-03-14T15:58:58.697216Z", "iopub.status.idle": "2023-03-14T15:58:59.185872Z", "shell.execute_reply": "2023-03-14T15:58:59.184594Z"}, "papermill": {"duration": 0.50016, "end_time": "2023-03-14T15:58:59.188692", "exception": false, "start_time": "2023-03-14T15:58:58.688532", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Downloading https://raw.githubusercontent.com/phlippe/saved_models/main/tutorial8/MNIST.ckpt...\n", "Downloading https://raw.githubusercontent.com/phlippe/saved_models/main/tutorial8/tensorboards/events.out.tfevents.MNIST...\n"]}], "source": ["# Github URL where saved models are stored for this tutorial\n", "base_url = \"https://raw.githubusercontent.com/phlippe/saved_models/main/tutorial8/\"\n", "# Files to download\n", "pretrained_files = [\"MNIST.ckpt\", \"tensorboards/events.out.tfevents.MNIST\"]\n", "\n", "# Create checkpoint path if it doesn't exist yet\n", "os.makedirs(CHECKPOINT_PATH, exist_ok=True)\n", "\n", "# For each file, check whether it already exists. If not, try downloading it.\n", "for file_name in pretrained_files:\n", " file_path = os.path.join(CHECKPOINT_PATH, file_name)\n", " if \"/\" in file_name:\n", " os.makedirs(file_path.rsplit(\"/\", 1)[0], exist_ok=True)\n", " if not os.path.isfile(file_path):\n", " file_url = base_url + file_name\n", " print(\"Downloading %s...\" % file_url)\n", " try:\n", " urllib.request.urlretrieve(file_url, file_path)\n", " except HTTPError as e:\n", " print(\n", " \"Something went wrong. Please try to download the files manually,\"\n", " \" or contact the author with the full output including the following error:\\n\",\n", " e,\n", " )"]}, {"cell_type": "markdown", "id": "69845468", "metadata": {"papermill": {"duration": 0.007111, "end_time": "2023-03-14T15:58:59.206990", "exception": false, "start_time": "2023-03-14T15:58:59.199879", "status": "completed"}, "tags": []}, "source": ["## Energy Models\n", "\n", "In the first part of this tutorial, we will review the theory of the energy-based models\n", "(the same theory has been discussed in Lecture 8).\n", "While most of the previous models had the goal of classification or regression,\n", "energy-based models are motivated from a different perspective: density estimation.\n", "Given a dataset with a lot of elements, we want to estimate the probability distribution over the whole data space.\n", "As an example, if we model images from CIFAR10, our goal would be to have a probability distribution\n", "over all possible images of size $32\\times32\\times3$ where those images have a high likelihood\n", "that look realistic and are one of the 10 CIFAR classes.\n", "Simple methods like interpolation between images don't work because images are extremely high-dimensional\n", "(especially for large HD images).\n", "Hence, we turn to deep learning methods that have performed well on complex data.\n", "\n", "However, how do we predict a probability distribution $p(\\mathbf{x})$ over so many dimensions using a simple neural network?\n", "The problem is that we cannot just predict a score between 0 and 1,\n", "because a probability distribution over data needs to fulfill two properties:\n", "\n", "1.\n", "The probability distribution needs to assign any possible value of\n", "$\\mathbf{x}$ a non-negative value: $p(\\mathbf{x}) \\geq 0$.\n", "2.\n", "The probability density must sum/integrate to 1 over **all** possible inputs:\n", "$\\int_{\\mathbf{x}} p(\\mathbf{x}) d\\mathbf{x} = 1$.\n", "\n", "Luckily, there are actually many approaches for this, and one of them are energy-based models.\n", "The fundamental idea of energy-based models is that you can turn any function\n", "that predicts values larger than zero into a probability distribution by dviding by its volume.\n", "Imagine we have a neural network, which has as output a single neuron, like in regression.\n", "We can call this network $E_{\\theta}(\\mathbf{x})$, where $\\theta$ are our parameters of the network,\n", "and $\\mathbf{x}$ the input data (e.g. an image).\n", "The output of $E_{\\theta}$ is a scalar value between $-\\infty$ and $\\infty$.\n", "Now, we can use basic probability theory to *normalize* the scores of all possible inputs:\n", "\n", "$$\n", "q_{\\theta}(\\mathbf{x}) = \\frac{\\exp\\left(-E_{\\theta}(\\mathbf{x})\\right)}{Z_{\\theta}} \\hspace{5mm}\\text{where}\\hspace{5mm}\n", "Z_{\\theta} = \\begin{cases}\n", " \\int_{\\mathbf{x}}\\exp\\left(-E_{\\theta}(\\mathbf{x})\\right) d\\mathbf{x} & \\text{if }x\\text{ is continuous}\\\\\n", " \\sum_{\\mathbf{x}}\\exp\\left(-E_{\\theta}(\\mathbf{x})\\right) & \\text{if }x\\text{ is discrete}\n", "\\end{cases}\n", "$$\n", "\n", "The $\\exp$-function ensures that we assign a probability greater than zero to any possible input.\n", "We use a negative sign in front of $E$ because we call $E_{\\theta}$ to be the energy function:\n", "data points with high likelihood have a low energy, while data points with low likelihood have a high energy.\n", "$Z_{\\theta}$ is our normalization terms that ensures that the density integrates/sums to 1.\n", "We can show this by integrating over $q_{\\theta}(\\mathbf{x})$:\n", "\n", "$$\n", "\\int_{\\mathbf{x}}q_{\\theta}(\\mathbf{x})d\\mathbf{x} =\n", "\\int_{\\mathbf{x}}\\frac{\\exp\\left(-E_{\\theta}(\\mathbf{x})\\right)}{\\int_{\\mathbf{\\tilde{x}}}\\exp\\left(-E_{\\theta}(\\mathbf{\\tilde{x}})\\right) d\\mathbf{\\tilde{x}}}d\\mathbf{x} =\n", "\\frac{\\int_{\\mathbf{x}}\\exp\\left(-E_{\\theta}(\\mathbf{x})\\right)d\\mathbf{x}}{\\int_{\\mathbf{\\tilde{x}}}\\exp\\left(-E_{\\theta}(\\mathbf{\\tilde{x}})\\right) d\\mathbf{\\tilde{x}}} = 1\n", "$$\n", "\n", "Note that we call the probability distribution $q_{\\theta}(\\mathbf{x})$ because this is the learned distribution by the model,\n", "and is trained to be as close as possible to the *true*, unknown distribution $p(\\mathbf{x})$.\n", "\n", "The main benefit of this formulation of the probability distribution is its great flexibility as we can choose\n", "$E_{\\theta}$ in whatever way we like, without any constraints.\n", "Nevertheless, when looking at the equation above, we can see a fundamental issue: How do we calculate $Z_{\\theta}$?\n", "There is no chance that we can calculate $Z_{\\theta}$ analytically for high-dimensional input\n", "and/or larger neural networks, but the task requires us to know $Z_{\\theta}$.\n", "Although we can't determine the exact likelihood of a point, there exist methods with which we can train energy-based models.\n", "Thus, we will look next at \"Contrastive Divergence\" for training the model."]}, {"cell_type": "markdown", "id": "e52ad8f5", "metadata": {"papermill": {"duration": 0.007085, "end_time": "2023-03-14T15:58:59.221198", "exception": false, "start_time": "2023-03-14T15:58:59.214113", "status": "completed"}, "tags": []}, "source": ["### Contrastive Divergence\n", "\n", "When we train a model on generative modeling, it is usually done by maximum likelihood estimation.\n", "In other words, we try to maximize the likelihood of the examples in the training set.\n", "As the exact likelihood of a point cannot be determined due to the unknown normalization constant $Z_{\\theta}$,\n", "we need to train energy-based models slightly different.\n", "We cannot just maximize the un-normalized probability $\\exp(-E_{\\theta}(\\mathbf{x}_{\\text{train}}))$\n", "because there is no guarantee that $Z_{\\theta}$ stays constant, or that $\\mathbf{x}_{\\text{train}}$\n", "is becoming more likely than the others.\n", "However, if we base our training on comparing the likelihood of points, we can create a stable objective.\n", "Namely, we can re-write our maximum likelihood objective where we maximize the probability\n", "of $\\mathbf{x}_{\\text{train}}$ compared to a randomly sampled data point of our model:\n", "\n", "$$\n", "\\begin{split}\n", " \\nabla_{\\theta}\\mathcal{L}_{\\text{MLE}}(\\mathbf{\\theta};p) & = -\\mathbb{E}_{p(\\mathbf{x})}\\left[\\nabla_{\\theta}\\log q_{\\theta}(\\mathbf{x})\\right]\\\\[5pt]\n", " & = \\mathbb{E}_{p(\\mathbf{x})}\\left[\\nabla_{\\theta}E_{\\theta}(\\mathbf{x})\\right] - \\mathbb{E}_{q_{\\theta}(\\mathbf{x})}\\left[\\nabla_{\\theta}E_{\\theta}(\\mathbf{x})\\right]\n", "\\end{split}\n", "$$\n", "\n", "Note that the loss is still an objective we want to minimize.\n", "Thus, we try to minimize the energy for data points from the dataset, while maximizing the energy for randomly\n", "sampled data points from our model (how we sample will be explained below).\n", "Although this objective sounds intuitive, how is it actually derived from our original distribution $q_{\\theta}(\\mathbf{x})$?\n", "The trick is that we approximate $Z_{\\theta}$ by a single Monte-Carlo sample.\n", "This gives us the exact same objective as written above.\n", "\n", "Visually, we can look at the objective as follows (figure credit\n", "- [Stefano Ermon and Aditya Grover](https://deepgenerativemodels.github.io/assets/slides/cs236_lecture11.pdf)):\n", "\n", "
\n", "\n", "$f_{\\theta}$ represents $\\exp(-E_{\\theta}(\\mathbf{x}))$ in our case.\n", "The point on the right, called \"correct answer\", represents a data point from the dataset\n", "(i.e. $x_{\\text{train}}$), and the left point, \"wrong answer\", a sample from our model (i.e. $x_{\\text{sample}}$).\n", "Thus, we try to \"pull up\" the probability of the data points in the dataset,\n", "while \"pushing down\" randomly sampled points.\n", "The two forces for pulling and pushing are in balance iff $q_{\\theta}(\\mathbf{x})=p(\\mathbf{x})$."]}, {"cell_type": "markdown", "id": "f3961daa", "metadata": {"papermill": {"duration": 0.007064, "end_time": "2023-03-14T15:58:59.235361", "exception": false, "start_time": "2023-03-14T15:58:59.228297", "status": "completed"}, "tags": []}, "source": ["### Sampling from Energy-Based Models\n", "\n", "For sampling from an energy-based model, we can apply a Markov Chain Monte Carlo using Langevin Dynamics.\n", "The idea of the algorithm is to start from a random point, and slowly move towards the direction\n", "of higher probability using the gradients of $E_{\\theta}$.\n", "Nevertheless, this is not enough to fully capture the probability distribution.\n", "We need to add noise $\\omega$ at each gradient step to the current sample.\n", "Under certain conditions such as that we perform the gradient steps an infinite amount of times,\n", "we would be able to create an exact sample from our modeled distribution.\n", "However, as this is not practically possible, we usually limit the chain to $K$ steps\n", "($K$ a hyperparameter that needs to be finetuned).\n", "Overall, the sampling procedure can be summarized in the following algorithm:\n", "\n", "
"]}, {"cell_type": "markdown", "id": "a42b906f", "metadata": {"papermill": {"duration": 0.007051, "end_time": "2023-03-14T15:58:59.249505", "exception": false, "start_time": "2023-03-14T15:58:59.242454", "status": "completed"}, "tags": []}, "source": ["### Applications of Energy-based models beyond generation\n", "\n", "Modeling the probability distribution for sampling new data is not the only application of energy-based models.\n", "Any application which requires us to compare two elements is much simpler to learn\n", "because we just need to go for the higher energy.\n", "A couple of examples are shown below (figure credit\n", "- [Stefano Ermon and Aditya Grover](https://deepgenerativemodels.github.io/assets/slides/cs236_lecture11.pdf)).\n", "A classification setup like object recognition or sequence labeling can be considered as an energy-based\n", "task as we just need to find the $Y$ input that minimizes the output $E(X, Y)$ (hence maximizes probability).\n", "Similarly, a popular application of energy-based models is denoising of images.\n", "Given an image $X$ with a lot of noise, we try to minimize the energy by finding the true input image $Y$.\n", "\n", "
\n", "\n", "Nonetheless, we will focus on generative modeling here as in the next couple of lectures,\n", "we will discuss more generative deep learning approaches."]}, {"cell_type": "markdown", "id": "be25221c", "metadata": {"papermill": {"duration": 0.007079, "end_time": "2023-03-14T15:58:59.263669", "exception": false, "start_time": "2023-03-14T15:58:59.256590", "status": "completed"}, "tags": []}, "source": ["## Image generation\n", "\n", "
\n", "\n", "As an example for energy-based models, we will train a model on image generation.\n", "Specifically, we will look at how we can generate MNIST digits with a very simple CNN model.\n", "However, it should be noted that energy models are not easy to train and often diverge\n", "if the hyperparameters are not well tuned.\n", "We will rely on training tricks proposed in the paper\n", "[Implicit Generation and Generalization in Energy-Based Models](https://arxiv.org/abs/1903.08689)\n", "by Yilun Du and Igor Mordatch ([blog](https://openai.com/blog/energy-based-models/)).\n", "The important part of this notebook is however to see how the theory above can actually be used in a model.\n", "\n", "### Dataset\n", "\n", "First, we can load the MNIST dataset below.\n", "Note that we need to normalize the images between -1 and 1 instead of mean 0 and std 1 because during sampling,\n", "we have to limit the input space.\n", "Scaling between -1 and 1 makes it easier to implement it."]}, {"cell_type": "code", "execution_count": 4, "id": "bb63c3f8", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:58:59.279890Z", "iopub.status.busy": "2023-03-14T15:58:59.279502Z", "iopub.status.idle": "2023-03-14T15:59:00.345049Z", "shell.execute_reply": "2023-03-14T15:59:00.344434Z"}, "papermill": {"duration": 1.075461, "end_time": "2023-03-14T15:59:00.346230", "exception": false, "start_time": "2023-03-14T15:58:59.270769", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n", "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to /__w/6/s/.datasets/MNIST/raw/train-images-idx3-ubyte.gz\n"]}, {"data": {"application/vnd.jupyter.widget-view+json": {"model_id": "e4a7ceab14c749b38562cb17e22a7ec7", "version_major": 2, "version_minor": 0}, "text/plain": [" 0%| | 0/9912422 [00:00 make them a tensor and normalize between -1 and 1\n", "transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])\n", "\n", "# Loading the training dataset. We need to split it into a training and validation part\n", "train_set = MNIST(root=DATASET_PATH, train=True, transform=transform, download=True)\n", "\n", "# Loading the test set\n", "test_set = MNIST(root=DATASET_PATH, train=False, transform=transform, download=True)\n", "\n", "# We define a set of data loaders that we can use for various purposes later.\n", "# Note that for actually training a model, we will use different data loaders\n", "# with a lower batch size.\n", "train_loader = data.DataLoader(train_set, batch_size=128, shuffle=True, drop_last=True, num_workers=4, pin_memory=True)\n", "test_loader = data.DataLoader(test_set, batch_size=256, shuffle=False, drop_last=False, num_workers=4)"]}, {"cell_type": "markdown", "id": "b0834b2c", "metadata": {"lines_to_next_cell": 2, "papermill": {"duration": 0.008702, "end_time": "2023-03-14T15:59:00.363502", "exception": false, "start_time": "2023-03-14T15:59:00.354800", "status": "completed"}, "tags": []}, "source": ["### CNN Model\n", "\n", "First, we implement our CNN model.\n", "The MNIST images are of size 28x28, hence we only need a small model.\n", "As an example, we will apply several convolutions with stride 2 that downscale the images.\n", "If you are interested, you can also use a deeper model such as a small ResNet, but for simplicity,\n", "we will stick with the tiny network.\n", "\n", "It is a good practice to use a smooth activation function like Swish instead of ReLU in the energy model.\n", "This is because we will rely on the gradients we get back with respect to the input image, which should not be sparse."]}, {"cell_type": "code", "execution_count": 5, "id": "684d2fbb", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:00.384373Z", "iopub.status.busy": "2023-03-14T15:59:00.383857Z", "iopub.status.idle": "2023-03-14T15:59:00.392769Z", "shell.execute_reply": "2023-03-14T15:59:00.392090Z"}, "lines_to_next_cell": 2, "papermill": {"duration": 0.020666, "end_time": "2023-03-14T15:59:00.393989", "exception": false, "start_time": "2023-03-14T15:59:00.373323", "status": "completed"}, "tags": []}, "outputs": [], "source": ["class CNNModel(nn.Module):\n", " def __init__(self, hidden_features=32, out_dim=1, **kwargs):\n", " super().__init__()\n", " # We increase the hidden dimension over layers. Here pre-calculated for simplicity.\n", " c_hid1 = hidden_features // 2\n", " c_hid2 = hidden_features\n", " c_hid3 = hidden_features * 2\n", "\n", " # Series of convolutions and Swish activation functions\n", " self.cnn_layers = nn.Sequential(\n", " nn.Conv2d(1, c_hid1, kernel_size=5, stride=2, padding=4), # [16x16] - Larger padding to get 32x32 image\n", " nn.SiLU(),\n", " nn.Conv2d(c_hid1, c_hid2, kernel_size=3, stride=2, padding=1), # [8x8]\n", " nn.SiLU(),\n", " nn.Conv2d(c_hid2, c_hid3, kernel_size=3, stride=2, padding=1), # [4x4]\n", " nn.SiLU(),\n", " nn.Conv2d(c_hid3, c_hid3, kernel_size=3, stride=2, padding=1), # [2x2]\n", " nn.SiLU(),\n", " nn.Flatten(),\n", " nn.Linear(c_hid3 * 4, c_hid3),\n", " nn.SiLU(),\n", " nn.Linear(c_hid3, out_dim),\n", " )\n", "\n", " def forward(self, x):\n", " x = self.cnn_layers(x).squeeze(dim=-1)\n", " return x"]}, {"cell_type": "markdown", "id": "beca1320", "metadata": {"papermill": {"duration": 0.007818, "end_time": "2023-03-14T15:59:00.410273", "exception": false, "start_time": "2023-03-14T15:59:00.402455", "status": "completed"}, "tags": []}, "source": ["In the rest of the notebook, the output of the model will actually not represent\n", "$E_{\\theta}(\\mathbf{x})$, but $-E_{\\theta}(\\mathbf{x})$.\n", "This is a standard implementation practice for energy-based models, as some people also write the energy probability\n", "density as $q_{\\theta}(\\mathbf{x}) = \\frac{\\exp\\left(f_{\\theta}(\\mathbf{x})\\right)}{Z_{\\theta}}$.\n", "In that case, the model would actually represent $f_{\\theta}(\\mathbf{x})$.\n", "In the training loss etc., we need to be careful to not switch up the signs."]}, {"cell_type": "markdown", "id": "0c541514", "metadata": {"lines_to_next_cell": 2, "papermill": {"duration": 0.007739, "end_time": "2023-03-14T15:59:00.425786", "exception": false, "start_time": "2023-03-14T15:59:00.418047", "status": "completed"}, "tags": []}, "source": ["### Sampling buffer\n", "\n", "In the next part, we look at the training with sampled elements.\n", "To use the contrastive divergence objective, we need to generate samples during training.\n", "Previous work has shown that due to the high dimensionality of images, we need a lot of iterations\n", "inside the MCMC sampling to obtain reasonable samples.\n", "However, there is a training trick that significantly reduces the sampling cost: using a sampling buffer.\n", "The idea is that we store the samples of the last couple of batches in a buffer,\n", "and re-use those as the starting point of the MCMC algorithm for the next batches.\n", "This reduces the sampling cost because the model requires a significantly\n", "lower number of steps to converge to reasonable samples.\n", "However, to not solely rely on previous samples and allow novel samples as well,\n", "we re-initialize 5% of our samples from scratch (random noise between -1 and 1).\n", "\n", "Below, we implement the sampling buffer.\n", "The function `sample_new_exmps` returns a new batch of \"fake\" images.\n", "We refer to those as fake images because they have been generated, but are not actually part of the dataset.\n", "As mentioned before, we use initialize 5% randomly, and 95% are randomly picked from our buffer.\n", "On this initial batch, we perform MCMC for 60 iterations to improve the image quality\n", "and come closer to samples from $q_{\\theta}(\\mathbf{x})$.\n", "In the function `generate_samples`, we implemented the MCMC for images.\n", "Note that the hyperparameters of `step_size`, `steps`, the noise standard deviation\n", "$\\sigma$ are specifically set for MNIST, and need to be finetuned for a different dataset if you want to use such."]}, {"cell_type": "code", "execution_count": 6, "id": "8abdf046", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:00.442322Z", "iopub.status.busy": "2023-03-14T15:59:00.442131Z", "iopub.status.idle": "2023-03-14T15:59:00.454001Z", "shell.execute_reply": "2023-03-14T15:59:00.453494Z"}, "lines_to_next_cell": 2, "papermill": {"duration": 0.021653, "end_time": "2023-03-14T15:59:00.455205", "exception": false, "start_time": "2023-03-14T15:59:00.433552", "status": "completed"}, "tags": []}, "outputs": [], "source": ["class Sampler:\n", " def __init__(self, model, img_shape, sample_size, max_len=8192):\n", " \"\"\"\n", " Args:\n", " model: Neural network to use for modeling E_theta\n", " img_shape: Shape of the images to model\n", " sample_size: Batch size of the samples\n", " max_len: Maximum number of data points to keep in the buffer\n", " \"\"\"\n", " super().__init__()\n", " self.model = model\n", " self.img_shape = img_shape\n", " self.sample_size = sample_size\n", " self.max_len = max_len\n", " self.examples = [(torch.rand((1,) + img_shape) * 2 - 1) for _ in range(self.sample_size)]\n", "\n", " def sample_new_exmps(self, steps=60, step_size=10):\n", " \"\"\"Function for getting a new batch of \"fake\" images.\n", "\n", " Args:\n", " steps: Number of iterations in the MCMC algorithm\n", " step_size: Learning rate nu in the algorithm above\n", " \"\"\"\n", " # Choose 95% of the batch from the buffer, 5% generate from scratch\n", " n_new = np.random.binomial(self.sample_size, 0.05)\n", " rand_imgs = torch.rand((n_new,) + self.img_shape) * 2 - 1\n", " old_imgs = torch.cat(random.choices(self.examples, k=self.sample_size - n_new), dim=0)\n", " inp_imgs = torch.cat([rand_imgs, old_imgs], dim=0).detach().to(device)\n", "\n", " # Perform MCMC sampling\n", " inp_imgs = Sampler.generate_samples(self.model, inp_imgs, steps=steps, step_size=step_size)\n", "\n", " # Add new images to the buffer and remove old ones if needed\n", " self.examples = list(inp_imgs.to(torch.device(\"cpu\")).chunk(self.sample_size, dim=0)) + self.examples\n", " self.examples = self.examples[: self.max_len]\n", " return inp_imgs\n", "\n", " @staticmethod\n", " def generate_samples(model, inp_imgs, steps=60, step_size=10, return_img_per_step=False):\n", " \"\"\"Function for sampling images for a given model.\n", "\n", " Args:\n", " model: Neural network to use for modeling E_theta\n", " inp_imgs: Images to start from for sampling. If you want to generate new images, enter noise between -1 and 1.\n", " steps: Number of iterations in the MCMC algorithm.\n", " step_size: Learning rate nu in the algorithm above\n", " return_img_per_step: If True, we return the sample at every iteration of the MCMC\n", " \"\"\"\n", " # Before MCMC: set model parameters to \"required_grad=False\"\n", " # because we are only interested in the gradients of the input.\n", " is_training = model.training\n", " model.eval()\n", " for p in model.parameters():\n", " p.requires_grad = False\n", " inp_imgs.requires_grad = True\n", "\n", " # Enable gradient calculation if not already the case\n", " had_gradients_enabled = torch.is_grad_enabled()\n", " torch.set_grad_enabled(True)\n", "\n", " # We use a buffer tensor in which we generate noise each loop iteration.\n", " # More efficient than creating a new tensor every iteration.\n", " noise = torch.randn(inp_imgs.shape, device=inp_imgs.device)\n", "\n", " # List for storing generations at each step (for later analysis)\n", " imgs_per_step = []\n", "\n", " # Loop over K (steps)\n", " for _ in range(steps):\n", " # Part 1: Add noise to the input.\n", " noise.normal_(0, 0.005)\n", " inp_imgs.data.add_(noise.data)\n", " inp_imgs.data.clamp_(min=-1.0, max=1.0)\n", "\n", " # Part 2: calculate gradients for the current input.\n", " out_imgs = -model(inp_imgs)\n", " out_imgs.sum().backward()\n", " inp_imgs.grad.data.clamp_(-0.03, 0.03) # For stabilizing and preventing too high gradients\n", "\n", " # Apply gradients to our current samples\n", " inp_imgs.data.add_(-step_size * inp_imgs.grad.data)\n", " inp_imgs.grad.detach_()\n", " inp_imgs.grad.zero_()\n", " inp_imgs.data.clamp_(min=-1.0, max=1.0)\n", "\n", " if return_img_per_step:\n", " imgs_per_step.append(inp_imgs.clone().detach())\n", "\n", " # Reactivate gradients for parameters for training\n", " for p in model.parameters():\n", " p.requires_grad = True\n", " model.train(is_training)\n", "\n", " # Reset gradient calculation to setting before this function\n", " torch.set_grad_enabled(had_gradients_enabled)\n", "\n", " if return_img_per_step:\n", " return torch.stack(imgs_per_step, dim=0)\n", " else:\n", " return inp_imgs"]}, {"cell_type": "markdown", "id": "885770f4", "metadata": {"papermill": {"duration": 0.007798, "end_time": "2023-03-14T15:59:00.471002", "exception": false, "start_time": "2023-03-14T15:59:00.463204", "status": "completed"}, "tags": []}, "source": ["The idea of the buffer becomes a bit clearer in the following algorithm."]}, {"cell_type": "markdown", "id": "2a7a817b", "metadata": {"lines_to_next_cell": 2, "papermill": {"duration": 0.007828, "end_time": "2023-03-14T15:59:00.486660", "exception": false, "start_time": "2023-03-14T15:59:00.478832", "status": "completed"}, "tags": []}, "source": ["### Training algorithm\n", "\n", "With the sampling buffer being ready, we can complete our training algorithm.\n", "Below is shown a summary of the full training algorithm of an energy model on image modeling:\n", "\n", "
\n", "\n", "The first few statements in each training iteration concern the sampling of the real and fake data,\n", "as we have seen above with the sample buffer.\n", "Next, we calculate the contrastive divergence objective using our energy model $E_{\\theta}$.\n", "However, one additional training trick we need is to add a regularization loss on the output of $E_{\\theta}$.\n", "As the output of the network is not constrained and adding a large bias or not to the output\n", "doesn't change the contrastive divergence loss, we need to ensure somehow else that the output values are in a reasonable range.\n", "Without the regularization loss, the output values will fluctuate in a very large range.\n", "With this, we ensure that the values for the real data are around 0, and the fake data likely slightly lower\n", "(for noise or outliers the score can be still significantly lower).\n", "As the regularization loss is less important than the Contrastive Divergence, we have a weight factor\n", "$\\alpha$ which is usually quite some smaller than 1.\n", "Finally, we perform an update step with an optimizer on the combined loss and add the new samples to the buffer.\n", "\n", "Below, we put this training dynamic into a PyTorch Lightning module:"]}, {"cell_type": "code", "execution_count": 7, "id": "4b7633ac", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:00.503927Z", "iopub.status.busy": "2023-03-14T15:59:00.503475Z", "iopub.status.idle": "2023-03-14T15:59:00.517238Z", "shell.execute_reply": "2023-03-14T15:59:00.516768Z"}, "lines_to_next_cell": 2, "papermill": {"duration": 0.023896, "end_time": "2023-03-14T15:59:00.518416", "exception": false, "start_time": "2023-03-14T15:59:00.494520", "status": "completed"}, "tags": []}, "outputs": [], "source": ["class DeepEnergyModel(L.LightningModule):\n", " def __init__(self, img_shape, batch_size, alpha=0.1, lr=1e-4, beta1=0.0, **CNN_args):\n", " super().__init__()\n", " self.save_hyperparameters()\n", "\n", " self.cnn = CNNModel(**CNN_args)\n", " self.sampler = Sampler(self.cnn, img_shape=img_shape, sample_size=batch_size)\n", " self.example_input_array = torch.zeros(1, *img_shape)\n", "\n", " def forward(self, x):\n", " z = self.cnn(x)\n", " return z\n", "\n", " def configure_optimizers(self):\n", " # Energy models can have issues with momentum as the loss surfaces changes with its parameters.\n", " # Hence, we set it to 0 by default.\n", " optimizer = optim.Adam(self.parameters(), lr=self.hparams.lr, betas=(self.hparams.beta1, 0.999))\n", " scheduler = optim.lr_scheduler.StepLR(optimizer, 1, gamma=0.97) # Exponential decay over epochs\n", " return [optimizer], [scheduler]\n", "\n", " def training_step(self, batch, batch_idx):\n", " # We add minimal noise to the original images to prevent the model from focusing on purely \"clean\" inputs\n", " real_imgs, _ = batch\n", " small_noise = torch.randn_like(real_imgs) * 0.005\n", " real_imgs.add_(small_noise).clamp_(min=-1.0, max=1.0)\n", "\n", " # Obtain samples\n", " fake_imgs = self.sampler.sample_new_exmps(steps=60, step_size=10)\n", "\n", " # Predict energy score for all images\n", " inp_imgs = torch.cat([real_imgs, fake_imgs], dim=0)\n", " real_out, fake_out = self.cnn(inp_imgs).chunk(2, dim=0)\n", "\n", " # Calculate losses\n", " reg_loss = self.hparams.alpha * (real_out**2 + fake_out**2).mean()\n", " cdiv_loss = fake_out.mean() - real_out.mean()\n", " loss = reg_loss + cdiv_loss\n", "\n", " # Logging\n", " self.log(\"loss\", loss)\n", " self.log(\"loss_regularization\", reg_loss)\n", " self.log(\"loss_contrastive_divergence\", cdiv_loss)\n", " self.log(\"metrics_avg_real\", real_out.mean())\n", " self.log(\"metrics_avg_fake\", fake_out.mean())\n", " return loss\n", "\n", " def validation_step(self, batch, batch_idx):\n", " # For validating, we calculate the contrastive divergence between purely random images and unseen examples\n", " # Note that the validation/test step of energy-based models depends on what we are interested in the model\n", " real_imgs, _ = batch\n", " fake_imgs = torch.rand_like(real_imgs) * 2 - 1\n", "\n", " inp_imgs = torch.cat([real_imgs, fake_imgs], dim=0)\n", " real_out, fake_out = self.cnn(inp_imgs).chunk(2, dim=0)\n", "\n", " cdiv = fake_out.mean() - real_out.mean()\n", " self.log(\"val_contrastive_divergence\", cdiv)\n", " self.log(\"val_fake_out\", fake_out.mean())\n", " self.log(\"val_real_out\", real_out.mean())"]}, {"cell_type": "markdown", "id": "ef4f6ecb", "metadata": {"papermill": {"duration": 0.007829, "end_time": "2023-03-14T15:59:00.534095", "exception": false, "start_time": "2023-03-14T15:59:00.526266", "status": "completed"}, "tags": []}, "source": ["We do not implement a test step because energy-based, generative models are usually not evaluated on a test set.\n", "The validation step however is used to get an idea of the difference between ennergy/likelihood\n", "of random images to unseen examples of the dataset."]}, {"cell_type": "markdown", "id": "7c2ff0dc", "metadata": {"lines_to_next_cell": 2, "papermill": {"duration": 0.007828, "end_time": "2023-03-14T15:59:00.549738", "exception": false, "start_time": "2023-03-14T15:59:00.541910", "status": "completed"}, "tags": []}, "source": ["### Callbacks\n", "\n", "To track the performance of our model during training, we will make extensive use of PyTorch Lightning's callback framework.\n", "Remember that callbacks can be used for running small functions at any point of the training,\n", "for instance after finishing an epoch.\n", "Here, we will use three different callbacks we define ourselves.\n", "\n", "The first callback, called `GenerateCallback`, is used for adding image generations to the model during training.\n", "After every $N$ epochs (usually $N=5$ to reduce output to TensorBoard), we take a small batch\n", "of random images and perform many MCMC iterations until the model's generation converges.\n", "Compared to the training that used 60 iterations, we use 256 here because\n", "(1) we only have to do it once compared to the training that has to do it every iteration, and\n", "(2) we do not start from a buffer here, but from scratch.\n", "It is implemented as follows:"]}, {"cell_type": "code", "execution_count": 8, "id": "d1f88300", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:00.566784Z", "iopub.status.busy": "2023-03-14T15:59:00.566433Z", "iopub.status.idle": "2023-03-14T15:59:00.577891Z", "shell.execute_reply": "2023-03-14T15:59:00.577424Z"}, "lines_to_next_cell": 2, "papermill": {"duration": 0.021533, "end_time": "2023-03-14T15:59:00.579079", "exception": false, "start_time": "2023-03-14T15:59:00.557546", "status": "completed"}, "tags": []}, "outputs": [], "source": ["class GenerateCallback(Callback):\n", " def __init__(self, batch_size=8, vis_steps=8, num_steps=256, every_n_epochs=5):\n", " super().__init__()\n", " self.batch_size = batch_size # Number of images to generate\n", " self.vis_steps = vis_steps # Number of steps within generation to visualize\n", " self.num_steps = num_steps # Number of steps to take during generation\n", " # Only save those images every N epochs (otherwise tensorboard gets quite large)\n", " self.every_n_epochs = every_n_epochs\n", "\n", " def on_epoch_end(self, trainer, pl_module):\n", " # Skip for all other epochs\n", " if trainer.current_epoch % self.every_n_epochs == 0:\n", " # Generate images\n", " imgs_per_step = self.generate_imgs(pl_module)\n", " # Plot and add to tensorboard\n", " for i in range(imgs_per_step.shape[1]):\n", " step_size = self.num_steps // self.vis_steps\n", " imgs_to_plot = imgs_per_step[step_size - 1 :: step_size, i]\n", " grid = torchvision.utils.make_grid(\n", " imgs_to_plot, nrow=imgs_to_plot.shape[0], normalize=True, range=(-1, 1)\n", " )\n", " trainer.logger.experiment.add_image(\"generation_%i\" % i, grid, global_step=trainer.current_epoch)\n", "\n", " def generate_imgs(self, pl_module):\n", " pl_module.eval()\n", " start_imgs = torch.rand((self.batch_size,) + pl_module.hparams[\"img_shape\"]).to(pl_module.device)\n", " start_imgs = start_imgs * 2 - 1\n", " imgs_per_step = Sampler.generate_samples(\n", " pl_module.cnn, start_imgs, steps=self.num_steps, step_size=10, return_img_per_step=True\n", " )\n", " pl_module.train()\n", " return imgs_per_step"]}, {"cell_type": "markdown", "id": "5a220acb", "metadata": {"lines_to_next_cell": 2, "papermill": {"duration": 0.007884, "end_time": "2023-03-14T15:59:00.595005", "exception": false, "start_time": "2023-03-14T15:59:00.587121", "status": "completed"}, "tags": []}, "source": ["The second callback is called `SamplerCallback`, and simply adds a randomly picked subset of images\n", "in the sampling buffer to the TensorBoard.\n", "This helps to understand what images are currently shown to the model as \"fake\"."]}, {"cell_type": "code", "execution_count": 9, "id": "3bb9b5cd", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:00.611793Z", "iopub.status.busy": "2023-03-14T15:59:00.611583Z", "iopub.status.idle": "2023-03-14T15:59:00.615786Z", "shell.execute_reply": "2023-03-14T15:59:00.615390Z"}, "lines_to_next_cell": 2, "papermill": {"duration": 0.014003, "end_time": "2023-03-14T15:59:00.616913", "exception": false, "start_time": "2023-03-14T15:59:00.602910", "status": "completed"}, "tags": []}, "outputs": [], "source": ["class SamplerCallback(Callback):\n", " def __init__(self, num_imgs=32, every_n_epochs=5):\n", " super().__init__()\n", " self.num_imgs = num_imgs # Number of images to plot\n", " # Only save those images every N epochs (otherwise tensorboard gets quite large)\n", " self.every_n_epochs = every_n_epochs\n", "\n", " def on_epoch_end(self, trainer, pl_module):\n", " if trainer.current_epoch % self.every_n_epochs == 0:\n", " exmp_imgs = torch.cat(random.choices(pl_module.sampler.examples, k=self.num_imgs), dim=0)\n", " grid = torchvision.utils.make_grid(exmp_imgs, nrow=4, normalize=True, range=(-1, 1))\n", " trainer.logger.experiment.add_image(\"sampler\", grid, global_step=trainer.current_epoch)"]}, {"cell_type": "markdown", "id": "c1d7d2ea", "metadata": {"lines_to_next_cell": 2, "papermill": {"duration": 0.007866, "end_time": "2023-03-14T15:59:00.632726", "exception": false, "start_time": "2023-03-14T15:59:00.624860", "status": "completed"}, "tags": []}, "source": ["Finally, our last callback is `OutlierCallback`.\n", "This callback evaluates the model by recording the (negative) energy assigned to random noise.\n", "While our training loss is almost constant across iterations,\n", "this score is likely showing the progress of the model to detect \"outliers\"."]}, {"cell_type": "code", "execution_count": 10, "id": "0a3896de", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:00.649822Z", "iopub.status.busy": "2023-03-14T15:59:00.649494Z", "iopub.status.idle": "2023-03-14T15:59:00.655811Z", "shell.execute_reply": "2023-03-14T15:59:00.654972Z"}, "lines_to_next_cell": 2, "papermill": {"duration": 0.016431, "end_time": "2023-03-14T15:59:00.657089", "exception": false, "start_time": "2023-03-14T15:59:00.640658", "status": "completed"}, "tags": []}, "outputs": [], "source": ["class OutlierCallback(Callback):\n", " def __init__(self, batch_size=1024):\n", " super().__init__()\n", " self.batch_size = batch_size\n", "\n", " def on_epoch_end(self, trainer, pl_module):\n", " with torch.no_grad():\n", " pl_module.eval()\n", " rand_imgs = torch.rand((self.batch_size,) + pl_module.hparams[\"img_shape\"]).to(pl_module.device)\n", " rand_imgs = rand_imgs * 2 - 1.0\n", " rand_out = pl_module.cnn(rand_imgs).mean()\n", " pl_module.train()\n", "\n", " trainer.logger.experiment.add_scalar(\"rand_out\", rand_out, global_step=trainer.current_epoch)"]}, {"cell_type": "markdown", "id": "96dcfad1", "metadata": {"lines_to_next_cell": 2, "papermill": {"duration": 0.007907, "end_time": "2023-03-14T15:59:00.672925", "exception": false, "start_time": "2023-03-14T15:59:00.665018", "status": "completed"}, "tags": []}, "source": ["### Running the model\n", "\n", "Finally, we can add everything together to create our final training function.\n", "The function is very similar to any other PyTorch Lightning training function we have seen so far.\n", "However, there is the small difference of that we do not test the model on a test set\n", "because we will analyse the model afterward by checking its prediction and ability to perform outlier detection."]}, {"cell_type": "code", "execution_count": 11, "id": "811784b0", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:00.689866Z", "iopub.status.busy": "2023-03-14T15:59:00.689599Z", "iopub.status.idle": "2023-03-14T15:59:00.696434Z", "shell.execute_reply": "2023-03-14T15:59:00.695810Z"}, "papermill": {"duration": 0.017051, "end_time": "2023-03-14T15:59:00.697938", "exception": false, "start_time": "2023-03-14T15:59:00.680887", "status": "completed"}, "tags": []}, "outputs": [], "source": ["def train_model(**kwargs):\n", " # Create a PyTorch Lightning trainer with the generation callback\n", " trainer = L.Trainer(\n", " default_root_dir=os.path.join(CHECKPOINT_PATH, \"MNIST\"),\n", " accelerator=\"auto\",\n", " devices=1,\n", " max_epochs=60,\n", " gradient_clip_val=0.1,\n", " callbacks=[\n", " ModelCheckpoint(save_weights_only=True, mode=\"min\", monitor=\"val_contrastive_divergence\"),\n", " GenerateCallback(every_n_epochs=5),\n", " SamplerCallback(every_n_epochs=5),\n", " OutlierCallback(),\n", " LearningRateMonitor(\"epoch\"),\n", " ],\n", " )\n", " # Check whether pretrained model exists. If yes, load it and skip training\n", " pretrained_filename = os.path.join(CHECKPOINT_PATH, \"MNIST.ckpt\")\n", " if os.path.isfile(pretrained_filename):\n", " print(\"Found pretrained model, loading...\")\n", " model = DeepEnergyModel.load_from_checkpoint(pretrained_filename)\n", " else:\n", " L.seed_everything(42)\n", " model = DeepEnergyModel(**kwargs)\n", " trainer.fit(model, train_loader, test_loader)\n", " model = DeepEnergyModel.load_from_checkpoint(trainer.checkpoint_callback.best_model_path)\n", " # No testing as we are more interested in other properties\n", " return model"]}, {"cell_type": "code", "execution_count": 12, "id": "31112329", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:00.715390Z", "iopub.status.busy": "2023-03-14T15:59:00.715122Z", "iopub.status.idle": "2023-03-14T15:59:01.027306Z", "shell.execute_reply": "2023-03-14T15:59:01.026766Z"}, "papermill": {"duration": 0.322552, "end_time": "2023-03-14T15:59:01.028585", "exception": false, "start_time": "2023-03-14T15:59:00.706033", "status": "completed"}, "tags": []}, "outputs": [{"name": "stderr", "output_type": "stream", "text": ["GPU available: True (cuda), used: True\n"]}, {"name": "stderr", "output_type": "stream", "text": ["TPU available: False, using: 0 TPU cores\n"]}, {"name": "stderr", "output_type": "stream", "text": ["IPU available: False, using: 0 IPUs\n"]}, {"name": "stderr", "output_type": "stream", "text": ["HPU available: False, using: 0 HPUs\n"]}, {"name": "stderr", "output_type": "stream", "text": ["Lightning automatically upgraded your loaded checkpoint from v1.0.2 to v2.0.0rc0. To apply the upgrade to your files permanently, run `python -m lightning.pytorch.utilities.upgrade_checkpoint --file saved_models/tutorial8/MNIST.ckpt`\n"]}, {"name": "stdout", "output_type": "stream", "text": ["Found pretrained model, loading...\n"]}], "source": ["model = train_model(img_shape=(1, 28, 28), batch_size=train_loader.batch_size, lr=1e-4, beta1=0.0)"]}, {"cell_type": "markdown", "id": "a1000d69", "metadata": {"papermill": {"duration": 0.008431, "end_time": "2023-03-14T15:59:01.046710", "exception": false, "start_time": "2023-03-14T15:59:01.038279", "status": "completed"}, "tags": []}, "source": ["## Analysis\n", "\n", "In the last part of the notebook, we will try to take the trained energy-based generative model,\n", "and analyse its properties."]}, {"cell_type": "markdown", "id": "262b8ce3", "metadata": {"papermill": {"duration": 0.008402, "end_time": "2023-03-14T15:59:01.063598", "exception": false, "start_time": "2023-03-14T15:59:01.055196", "status": "completed"}, "tags": []}, "source": ["### TensorBoard\n", "\n", "The first thing we can look at is the TensorBoard generate during training.\n", "This can help us to understand the training dynamic even better, and shows potential issues.\n", "Let's load the TensorBoard below:"]}, {"cell_type": "code", "execution_count": 13, "id": "e16cdd1e", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:01.081930Z", "iopub.status.busy": "2023-03-14T15:59:01.081619Z", "iopub.status.idle": "2023-03-14T15:59:02.118370Z", "shell.execute_reply": "2023-03-14T15:59:02.117290Z"}, "papermill": {"duration": 1.049019, "end_time": "2023-03-14T15:59:02.121054", "exception": false, "start_time": "2023-03-14T15:59:01.072035", "status": "completed"}, "tags": []}, "outputs": [{"data": {"text/html": ["\n", " \n", " \n", " "], "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["# Uncomment the following two lines to open a tensorboard in the notebook.\n", "# Adjust the path to your CHECKPOINT_PATH if needed.\n", "%load_ext tensorboard\n", "%tensorboard --logdir ../saved_models/tutorial8/tensorboards/"]}, {"cell_type": "markdown", "id": "f129c46c", "metadata": {"papermill": {"duration": 0.008826, "end_time": "2023-03-14T15:59:02.142935", "exception": false, "start_time": "2023-03-14T15:59:02.134109", "status": "completed"}, "tags": []}, "source": ["
"]}, {"cell_type": "markdown", "id": "8341c5a8", "metadata": {"papermill": {"duration": 0.008711, "end_time": "2023-03-14T15:59:02.160080", "exception": false, "start_time": "2023-03-14T15:59:02.151369", "status": "completed"}, "tags": []}, "source": ["We see that the contrastive divergence as well as the regularization converge quickly to 0.\n", "However, the training continues although the loss is always close to zero.\n", "This is because our \"training\" data changes with the model by sampling.\n", "The progress of training can be best measured by looking at the samples across iterations,\n", "and the score for random images that decreases constantly over time."]}, {"cell_type": "markdown", "id": "63d236e0", "metadata": {"papermill": {"duration": 0.008387, "end_time": "2023-03-14T15:59:02.176893", "exception": false, "start_time": "2023-03-14T15:59:02.168506", "status": "completed"}, "tags": []}, "source": ["### Image Generation\n", "\n", "Another way of evaluating generative models is by sampling a few generated images.\n", "Generative models need to be good at generating realistic images as this truely shows that they have modeled the true data distribution.\n", "Thus, let's sample a few images of the model below:"]}, {"cell_type": "code", "execution_count": 14, "id": "935605ad", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:02.195772Z", "iopub.status.busy": "2023-03-14T15:59:02.195307Z", "iopub.status.idle": "2023-03-14T15:59:05.920205Z", "shell.execute_reply": "2023-03-14T15:59:05.919084Z"}, "papermill": {"duration": 3.737993, "end_time": "2023-03-14T15:59:05.923333", "exception": false, "start_time": "2023-03-14T15:59:02.185340", "status": "completed"}, "tags": []}, "outputs": [{"name": "stderr", "output_type": "stream", "text": ["Global seed set to 43\n"]}], "source": ["model.to(device)\n", "L.seed_everything(43)\n", "callback = GenerateCallback(batch_size=4, vis_steps=8, num_steps=256)\n", "imgs_per_step = callback.generate_imgs(model)\n", "imgs_per_step = imgs_per_step.cpu()"]}, {"cell_type": "markdown", "id": "717b42f0", "metadata": {"papermill": {"duration": 0.008651, "end_time": "2023-03-14T15:59:05.948233", "exception": false, "start_time": "2023-03-14T15:59:05.939582", "status": "completed"}, "tags": []}, "source": ["The characteristic of sampling with energy-based models is that they require the iterative MCMC algorithm.\n", "To gain an insight in how the images change over iterations, we plot a few intermediate samples in the MCMC as well:"]}, {"cell_type": "code", "execution_count": 15, "id": "cd80d452", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:05.970400Z", "iopub.status.busy": "2023-03-14T15:59:05.970158Z", "iopub.status.idle": "2023-03-14T15:59:06.741929Z", "shell.execute_reply": "2023-03-14T15:59:06.741106Z"}, "papermill": {"duration": 0.788627, "end_time": "2023-03-14T15:59:06.745470", "exception": false, "start_time": "2023-03-14T15:59:05.956843", "status": "completed"}, "tags": []}, "outputs": [{"data": {"application/pdf": "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MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDE3IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSA0OCAvemVybyAvb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZlIC9zaXggNTYgL2VpZ2h0IC9uaW5lIDcxCi9HIDk3IC9hIDEwMSAvZSAxMDUgL2kgMTEwIC9uIC9vIDExNCAvciAxMTYgL3QgXQo+PgovV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTcgMCBvYmoKPDwgL0cgMTggMCBSIC9hIDE5IDAgUiAvZSAyMCAwIFIgL2VpZ2h0IDIxIDAgUiAvZml2ZSAyMiAwIFIgL2ZvdXIgMjMgMCBSCi9pIDI0IDAgUiAvbiAyNSAwIFIgL25pbmUgMjYgMCBSIC9vIDI3IDAgUiAvb25lIDI4IDAgUiAvciAyOSAwIFIKL3NpeCAzMCAwIFIgL3NwYWNlIDMxIDAgUiAvdCAzMiAwIFIgL3RocmVlIDMzIDAgUiAvdHdvIDM0IDAgUiAvemVybyAzNSAwIFIKPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE2IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvSTEgMTMgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDYyMCAvSGVpZ2h0IDczCi9Db2xvclNwYWNlIFsvSW5kZXhlZCAvRGV2aWNlUkdCIDI1NSAo/////v7+/f39/Pz8+/v7+vr6+fn5+Pj49/f39vb29fX19PT08/Pz8vLy8fHx8PDw7+/v7u7u7e3t7Ozs6+vr6urq6enp6Ojo5+fn5ubm5eXl5OTk4+Pj4uLi4eHh4ODg39/f3t7e3d3d3Nzc29vb2tra2dnZ2NjY19fX1tbW1dXV1NTU09PT0tLS0dHR0NDQz8/Pzs7Ozc3NzMzMy8vLysrKycnJyMjIx8fHxsbGxcXFxMTEw8PDwsLCwcHBwMDAv7+/vr6+vb29vLy8u7u7urq6ubm5uLi4t7e3tra2tbW1tLS0s7OzsrKysbGxsLCwr6+vrq6ura2trKysq6urqqqqqampqKiop6enpqampaWlpKSko6OjoqKioaGhoKCgn5+fnp6enZ2dnJycm5ubmpqamZmZmJiYl5eXlpaWlZWVlJSUk5OTkpKSkZGRkJCQj4+Pjo6OjY2NjIyMi4uLioqKiYmJiIiIh4eHhoaGhYWFhISEg4ODgoKCgYGBgICAf39/fn5+fX19fHx8e3t7enp6eXl5eHh4d3d3dnZ2dXV1dHR0c3NzcnJycXFxcHBwb29vbm5ubW1tbGxsa2trampqaWlpaGhoZ2dnZmZmZWVlZGRkY2NjYmJiYWFhYGBgX19fXl5eXV1dXFxcXFxcW1tbWlpaWVlZWFhYV1dXVlZWVVVVVFRUU1NTUlJSUVFRUFBQT09PTk5OTU1NTExMS0tLSkpKSUlJSEhIR0dHRkZGRUVFREREQ0NDQkJCQUFBQEBAPz8/Pj4+PT09PDw8Ozs7Ojo6OTk5ODg4Nzc3NjY2NTU1NDQ0MzMzMjIyMTExMDAwLy8vLi4uLS0tLCws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MDAwMDgwNTMgMDAwMDAgbiAKMDAwMDAwODA4NSAwMDAwMCBuIAowMDAwMDA4MTg0IDAwMDAwIG4gCjAwMDAwMDgyMDUgMDAwMDAgbiAKMDAwMDAwODIyNiAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzNDIgMDAwMDAgbiAKMDAwMDAwMDk2OSAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDA5NDkgMDAwMDAgbiAKMDAwMDAwODI1OCAwMDAwMCBuIAowMDAwMDA2NzY4IDAwMDAwIG4gCjAwMDAwMDY1NjEgMDAwMDAgbiAKMDAwMDAwNjEzNSAwMDAwMCBuIAowMDAwMDA3ODIxIDAwMDAwIG4gCjAwMDAwMDA5ODkgMDAwMDAgbiAKMDAwMDAwMTMwOSAwMDAwMCBuIAowMDAwMDAxNjg5IDAwMDAwIG4gCjAwMDAwMDIwMTEgMDAwMDAgbiAKMDAwMDAwMjQ3OSAwMDAwMCBuIAowMDAwMDAyODAxIDAwMDAwIG4gCjAwMDAwMDI5NjcgMDAwMDAgbiAKMDAwMDAwMzExMSAwMDAwMCBuIAowMDAwMDAzMzQ3IDAwMDAwIG4gCjAwMDAwMDM3NDIgMDAwMDAgbiAKMDAwMDAwNDAzMyAwMDAwMCBuIAowMDAwMDA0MTg4IDAwMDAwIG4gCjAwMDAwMDQ0MjEgMDAwMDAgbiAKMDAwMDAwNDgxNCAwMDAwMCBuIAowMDAwMDA0OTA0IDAwMDAwIG4gCjAwMDAwMDUxMTAgMDAwMDAgbiAKMDAwMDAwNTUyMyAwMDAwMCBuIAowMDAwMDA1ODQ3IDAwMDAwIG4gCjAwMDAwMjU3OTUgMDAwMDAgbiAKMDAwMDAyNTg3NyAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDM4IC9Sb290IDEgMCBSIC9JbmZvIDM3IDAgUiA+PgpzdGFydHhyZWYKMjYwMjgKJSVFT0YK", "image/svg+xml": ["\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-03-14T15:59:06.030856\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.6.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n"], "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}, {"data": {"application/pdf": "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MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDE3IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSA0OCAvemVybyAvb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZlIC9zaXggNTYgL2VpZ2h0IC9uaW5lIDcxCi9HIDk3IC9hIDEwMSAvZSAxMDUgL2kgMTEwIC9uIC9vIDExNCAvciAxMTYgL3QgXQo+PgovV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTcgMCBvYmoKPDwgL0cgMTggMCBSIC9hIDE5IDAgUiAvZSAyMCAwIFIgL2VpZ2h0IDIxIDAgUiAvZml2ZSAyMiAwIFIgL2ZvdXIgMjMgMCBSCi9pIDI0IDAgUiAvbiAyNSAwIFIgL25pbmUgMjYgMCBSIC9vIDI3IDAgUiAvb25lIDI4IDAgUiAvciAyOSAwIFIKL3NpeCAzMCAwIFIgL3NwYWNlIDMxIDAgUiAvdCAzMiAwIFIgL3RocmVlIDMzIDAgUiAvdHdvIDM0IDAgUiAvemVybyAzNSAwIFIKPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE2IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvSTEgMTMgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDYyMCAvSGVpZ2h0IDczCi9Db2xvclNwYWNlIFsvSW5kZXhlZCAvRGV2aWNlUkdCIDI1NSAo/////v7+/f39/Pz8+/v7+vr6+fn5+Pj49/f39vb29fX19PT08/Pz8vLy8fHx8PDw7+/v7u7u7e3t7Ozs6+vr6urq6enp6Ojo5+fn5ubm5eXl5OTk4+Pj4uLi4eHh4ODg39/f3t7e3d3d3Nzc29vb2tra2dnZ2NjY19fX1tbW1dXV1NTU09PT0tLS0dHR0NDQz8/Pzs7Ozc3NzMzMy8vLysrKycnJyMjIx8fHxsbGxcXFxMTEw8PDwsLCwcHBwMDAv7+/vr6+vb29vLy8u7u7urq6ubm5uLi4t7e3tra2tbW1tLS0s7OzsrKysbGxsLCwr6+vrq6ura2trKysq6urqqqqqampqKiop6enpqampaWlpKSko6OjoqKioaGhoKCgn5+fnp6enZ2dnJycm5ubmpqamZmZmJiYl5eXlpaWlZWVlJSUk5OTkpKSkZGRkJCQj4+Pjo6OjY2NjIyMi4uLioqKiYmJiIiIh4eHhoaGhYWFhISEg4ODgoKCgYGBgICAf39/fn5+fX19fHx8e3t7enp6eXl5eHh4d3d3dnZ2dXV1dHR0c3NzcnJycXFxcHBwb29vbm5ubW1tbGxsa2trampqaWlpaGhoZ2dnZmZmZWVlZGRkY2NjYmJiYWFhYGBgX19fXl5eXV1dXFxcXFxcW1tbWlpaWVlZWFhYV1dXVlZWVVVVVFRUU1NTUlJSUVFRUFBQT09PTk5OTU1NTExMS0tLSkpKSUlJSEhIR0dHRkZGRUVFREREQ0NDQkJCQUFBQEBAPz8/Pj4+PT09PDw8Ozs7Ojo6OTk5ODg4Nzc3NjY2NTU1NDQ0MzMzMjIyMTExMDAwLy8vLi4uLS0tLCws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MDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDI1ODc3IDAwMDAwIG4gCjAwMDAwMDgwNTMgMDAwMDAgbiAKMDAwMDAwODA4NSAwMDAwMCBuIAowMDAwMDA4MTg0IDAwMDAwIG4gCjAwMDAwMDgyMDUgMDAwMDAgbiAKMDAwMDAwODIyNiAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzNDIgMDAwMDAgbiAKMDAwMDAwMDk2OSAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDA5NDkgMDAwMDAgbiAKMDAwMDAwODI1OCAwMDAwMCBuIAowMDAwMDA2NzY4IDAwMDAwIG4gCjAwMDAwMDY1NjEgMDAwMDAgbiAKMDAwMDAwNjEzNSAwMDAwMCBuIAowMDAwMDA3ODIxIDAwMDAwIG4gCjAwMDAwMDA5ODkgMDAwMDAgbiAKMDAwMDAwMTMwOSAwMDAwMCBuIAowMDAwMDAxNjg5IDAwMDAwIG4gCjAwMDAwMDIwMTEgMDAwMDAgbiAKMDAwMDAwMjQ3OSAwMDAwMCBuIAowMDAwMDAyODAxIDAwMDAwIG4gCjAwMDAwMDI5NjcgMDAwMDAgbiAKMDAwMDAwMzExMSAwMDAwMCBuIAowMDAwMDAzMzQ3IDAwMDAwIG4gCjAwMDAwMDM3NDIgMDAwMDAgbiAKMDAwMDAwNDAzMyAwMDAwMCBuIAowMDAwMDA0MTg4IDAwMDAwIG4gCjAwMDAwMDQ0MjEgMDAwMDAgbiAKMDAwMDAwNDgxNCAwMDAwMCBuIAowMDAwMDA0OTA0IDAwMDAwIG4gCjAwMDAwMDUxMTAgMDAwMDAgbiAKMDAwMDAwNTUyMyAwMDAwMCBuIAowMDAwMDA1ODQ3IDAwMDAwIG4gCjAwMDAwMjU4NTUgMDAwMDAgbiAKMDAwMDAyNTkzNyAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDM4IC9Sb290IDEgMCBSIC9JbmZvIDM3IDAgUiA+PgpzdGFydHhyZWYKMjYwODgKJSVFT0YK", "image/svg+xml": ["\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-03-14T15:59:06.395181\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.6.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n"], "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}, {"data": {"application/pdf": "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MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDE3IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSA0OCAvemVybyAvb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZlIC9zaXggNTYgL2VpZ2h0IC9uaW5lIDcxCi9HIDk3IC9hIDEwMSAvZSAxMDUgL2kgMTEwIC9uIC9vIDExNCAvciAxMTYgL3QgXQo+PgovV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTcgMCBvYmoKPDwgL0cgMTggMCBSIC9hIDE5IDAgUiAvZSAyMCAwIFIgL2VpZ2h0IDIxIDAgUiAvZml2ZSAyMiAwIFIgL2ZvdXIgMjMgMCBSCi9pIDI0IDAgUiAvbiAyNSAwIFIgL25pbmUgMjYgMCBSIC9vIDI3IDAgUiAvb25lIDI4IDAgUiAvciAyOSAwIFIKL3NpeCAzMCAwIFIgL3NwYWNlIDMxIDAgUiAvdCAzMiAwIFIgL3RocmVlIDMzIDAgUiAvdHdvIDM0IDAgUiAvemVybyAzNSAwIFIKPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE2IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvSTEgMTMgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDYyMCAvSGVpZ2h0IDczCi9Db2xvclNwYWNlIFsvSW5kZXhlZCAvRGV2aWNlUkdCIDI1NSAo/////v7+/f39/Pz8+/v7+vr6+fn5+Pj49/f39vb29fX19PT08/Pz8vLy8fHx8PDw7+/v7u7u7e3t7Ozs6+vr6urq6enp6Ojo5+fn5ubm5eXl5OTk4+Pj4uLi4eHh4ODg39/f3t7e3d3d3Nzc29vb2tra2dnZ2NjY19fX1tbW1dXV1NTU09PT0tLS0dHR0NDQz8/Pzs7Ozc3NzMzMy8vLysrKycnJyMjIx8fHxsbGxcXFxMTEw8PDwsLCwcHBwMDAv7+/vr6+vb29vLy8u7u7urq6ubm5uLi4t7e3tra2tbW1tLS0s7OzsrKysbGxsLCwr6+vrq6ura2trKysq6urqqqqqampqKiop6enpqampaWlpKSko6OjoqKioaGhoKCgn5+fnp6enZ2dnJycm5ubmpqamZmZmJiYl5eXlpaWlZWVlJSUk5OTkpKSkZGRkJCQj4+Pjo6OjY2NjIyMi4uLioqKiYmJiIiIh4eHhoaGhYWFhISEg4ODgoKCgYGBgICAf39/fn5+fX19fHx8e3t7enp6eXl5eHh4d3d3dnZ2dXV1dHR0c3NzcnJycXFxcHBwb29vbm5ubW1tbGxsa2trampqaWlpaGhoZ2dnZmZmZWVlZGRkY2NjYmJiYWFhYGBgX19fXl5eXV1dXFxcXFxcW1tbWlpaWVlZWFhYV1dXVlZWVVVVVFRUU1NTUlJSUVFRUFBQT09PTk5OTU1NTExMS0tLSkpKSUlJSEhIR0dHRkZGRUVFREREQ0NDQkJCQUFBQEBAPz8/Pj4+PT09PDw8Ozs7Ojo6OTk5ODg4Nzc3NjY2NTU1NDQ0MzMzMjIyMTExMDAwLy8vLi4uLS0tLCws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IAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzNDIgMDAwMDAgbiAKMDAwMDAwMDk2OSAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDA5NDkgMDAwMDAgbiAKMDAwMDAwODI1OCAwMDAwMCBuIAowMDAwMDA2NzY4IDAwMDAwIG4gCjAwMDAwMDY1NjEgMDAwMDAgbiAKMDAwMDAwNjEzNSAwMDAwMCBuIAowMDAwMDA3ODIxIDAwMDAwIG4gCjAwMDAwMDA5ODkgMDAwMDAgbiAKMDAwMDAwMTMwOSAwMDAwMCBuIAowMDAwMDAxNjg5IDAwMDAwIG4gCjAwMDAwMDIwMTEgMDAwMDAgbiAKMDAwMDAwMjQ3OSAwMDAwMCBuIAowMDAwMDAyODAxIDAwMDAwIG4gCjAwMDAwMDI5NjcgMDAwMDAgbiAKMDAwMDAwMzExMSAwMDAwMCBuIAowMDAwMDAzMzQ3IDAwMDAwIG4gCjAwMDAwMDM3NDIgMDAwMDAgbiAKMDAwMDAwNDAzMyAwMDAwMCBuIAowMDAwMDA0MTg4IDAwMDAwIG4gCjAwMDAwMDQ0MjEgMDAwMDAgbiAKMDAwMDAwNDgxNCAwMDAwMCBuIAowMDAwMDA0OTA0IDAwMDAwIG4gCjAwMDAwMDUxMTAgMDAwMDAgbiAKMDAwMDAwNTUyMyAwMDAwMCBuIAowMDAwMDA1ODQ3IDAwMDAwIG4gCjAwMDAwMjU2OTkgMDAwMDAgbiAKMDAwMDAyNTc4MSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDM4IC9Sb290IDEgMCBSIC9JbmZvIDM3IDAgUiA+PgpzdGFydHhyZWYKMjU5MzIKJSVFT0YK", "image/svg+xml": ["\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-03-14T15:59:06.517860\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.6.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n"], "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}, {"data": {"application/pdf": "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MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDE3IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSA0OCAvemVybyAvb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZlIC9zaXggNTYgL2VpZ2h0IC9uaW5lIDcxCi9HIDk3IC9hIDEwMSAvZSAxMDUgL2kgMTEwIC9uIC9vIDExNCAvciAxMTYgL3QgXQo+PgovV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTcgMCBvYmoKPDwgL0cgMTggMCBSIC9hIDE5IDAgUiAvZSAyMCAwIFIgL2VpZ2h0IDIxIDAgUiAvZml2ZSAyMiAwIFIgL2ZvdXIgMjMgMCBSCi9pIDI0IDAgUiAvbiAyNSAwIFIgL25pbmUgMjYgMCBSIC9vIDI3IDAgUiAvb25lIDI4IDAgUiAvciAyOSAwIFIKL3NpeCAzMCAwIFIgL3NwYWNlIDMxIDAgUiAvdCAzMiAwIFIgL3RocmVlIDMzIDAgUiAvdHdvIDM0IDAgUiAvemVybyAzNSAwIFIKPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE2IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvSTEgMTMgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDYyMCAvSGVpZ2h0IDczCi9Db2xvclNwYWNlIFsvSW5kZXhlZCAvRGV2aWNlUkdCIDI1NSAo/////v7+/f39/Pz8+/v7+vr6+fn5+Pj49/f39vb29fX19PT08/Pz8vLy8fHx8PDw7+/v7u7u7e3t7Ozs6+vr6urq6enp6Ojo5+fn5ubm5eXl5OTk4+Pj4uLi4eHh4ODg39/f3t7e3d3d3Nzc29vb2tra2dnZ2NjY19fX1tbW1dXV1NTU09PT0tLS0dHR0NDQz8/Pzs7Ozc3NzMzMy8vLysrKycnJyMjIx8fHxsbGxcXFxMTEw8PDwsLCwcHBwMDAv7+/vr6+vb29vLy8u7u7urq6ubm5uLi4t7e3tra2tbW1tLS0s7OzsrKysbGxsLCwr6+vrq6ura2trKysq6urqqqqqampqKiop6enpqampaWlpKSko6OjoqKioaGhoKCgn5+fnp6enZ2dnJycm5ubmpqamZmZmJiYl5eXlpaWlZWVlJSUk5OTkpKSkZGRkJCQj4+Pjo6OjY2NjIyMi4uLioqKiYmJiIiIh4eHhoaGhYWFhISEg4ODgoKCgYGBgICAf39/fn5+fX19fHx8e3t7enp6eXl5eHh4d3d3dnZ2dXV1dHR0c3NzcnJycXFxcHBwb29vbm5ubW1tbGxsa2trampqaWlpaGhoZ2dnZmZmZWVlZGRkY2NjYmJiYWFhYGBgX19fXl5eXV1dXFxcXFxcW1tbWlpaWVlZWFhYV1dXVlZWVVVVVFRUU1NTUlJSUVFRUFBQT09PTk5OTU1NTExMS0tLSkpKSUlJSEhIR0dHRkZGRUVFREREQ0NDQkJCQUFBQEBAPz8/Pj4+PT09PDw8Ozs7Ojo6OTk5ODg4Nzc3NjY2NTU1NDQ0MzMzMjIyMTExMDAwLy8vLi4uLS0tLCws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MDAwMDA4MjA1IDAwMDAwIG4gCjAwMDAwMDgyMjYgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzQyIDAwMDAwIG4gCjAwMDAwMDA5NjkgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAwOTQ5IDAwMDAwIG4gCjAwMDAwMDgyNTggMDAwMDAgbiAKMDAwMDAwNjc2OCAwMDAwMCBuIAowMDAwMDA2NTYxIDAwMDAwIG4gCjAwMDAwMDYxMzUgMDAwMDAgbiAKMDAwMDAwNzgyMSAwMDAwMCBuIAowMDAwMDAwOTg5IDAwMDAwIG4gCjAwMDAwMDEzMDkgMDAwMDAgbiAKMDAwMDAwMTY4OSAwMDAwMCBuIAowMDAwMDAyMDExIDAwMDAwIG4gCjAwMDAwMDI0NzkgMDAwMDAgbiAKMDAwMDAwMjgwMSAwMDAwMCBuIAowMDAwMDAyOTY3IDAwMDAwIG4gCjAwMDAwMDMxMTEgMDAwMDAgbiAKMDAwMDAwMzM0NyAwMDAwMCBuIAowMDAwMDAzNzQyIDAwMDAwIG4gCjAwMDAwMDQwMzMgMDAwMDAgbiAKMDAwMDAwNDE4OCAwMDAwMCBuIAowMDAwMDA0NDIxIDAwMDAwIG4gCjAwMDAwMDQ4MTQgMDAwMDAgbiAKMDAwMDAwNDkwNCAwMDAwMCBuIAowMDAwMDA1MTEwIDAwMDAwIG4gCjAwMDAwMDU1MjMgMDAwMDAgbiAKMDAwMDAwNTg0NyAwMDAwMCBuIAowMDAwMDI0ODM2IDAwMDAwIG4gCjAwMDAwMjQ5MTggMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAzOCAvUm9vdCAxIDAgUiAvSW5mbyAzNyAwIFIgPj4Kc3RhcnR4cmVmCjI1MDY5CiUlRU9GCg==", "image/svg+xml": ["\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-03-14T15:59:06.648866\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.6.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n"], "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}], "source": ["for i in range(imgs_per_step.shape[1]):\n", " step_size = callback.num_steps // callback.vis_steps\n", " imgs_to_plot = imgs_per_step[step_size - 1 :: step_size, i]\n", " imgs_to_plot = torch.cat([imgs_per_step[0:1, i], imgs_to_plot], dim=0)\n", " grid = torchvision.utils.make_grid(\n", " imgs_to_plot, nrow=imgs_to_plot.shape[0], normalize=True, range=(-1, 1), pad_value=0.5, padding=2\n", " )\n", " grid = grid.permute(1, 2, 0)\n", " plt.figure(figsize=(8, 8))\n", " plt.imshow(grid)\n", " plt.xlabel(\"Generation iteration\")\n", " plt.xticks(\n", " [(imgs_per_step.shape[-1] + 2) * (0.5 + j) for j in range(callback.vis_steps + 1)],\n", " labels=[1] + list(range(step_size, imgs_per_step.shape[0] + 1, step_size)),\n", " )\n", " plt.yticks([])\n", " plt.show()"]}, {"cell_type": "markdown", "id": "d4188004", "metadata": {"papermill": {"duration": 0.013177, "end_time": "2023-03-14T15:59:06.776523", "exception": false, "start_time": "2023-03-14T15:59:06.763346", "status": "completed"}, "tags": []}, "source": ["We see that although starting from noise in the very first step, the sampling algorithm obtains reasonable shapes after only 32 steps.\n", "Over the next 200 steps, the shapes become clearer and changed towards realistic digits.\n", "The specific samples can differ when you run the code on Colab, hence the following description is specific to the plots shown on the website.\n", "The first row shows an 8, where we remove unnecessary white parts over iterations.\n", "The transformation across iterations can be seen at best for the second sample, which creates a digit of 2.\n", "While the first sample after 32 iterations looks a bit like a digit, but not really,\n", "the sample is transformed more and more to a typical image of the digit 2."]}, {"cell_type": "markdown", "id": "76ce862b", "metadata": {"papermill": {"duration": 0.013438, "end_time": "2023-03-14T15:59:06.803239", "exception": false, "start_time": "2023-03-14T15:59:06.789801", "status": "completed"}, "tags": []}, "source": ["### Out-of-distribution detection\n", "\n", "A very common and strong application of energy-based models is out-of-distribution detection\n", "(sometimes referred to as \"anomaly\" detection).\n", "As more and more deep learning models are applied in production and applications,\n", "a crucial aspect of these models is to know what the models don't know.\n", "Deep learning models are usually overconfident, meaning that they classify even random images sometimes with 100% probability.\n", "Clearly, this is not something that we want to see in applications.\n", "Energy-based models can help with this problem because they are trained to detect images that do not fit the training dataset distribution.\n", "Thus, in those applications, you could train an energy-based model along with the classifier,\n", "and only output predictions if the energy-based models assign a (unnormalized) probability higher than $\\delta$ to the image.\n", "You can actually combine classifiers and energy-based objectives in a single model,\n", "as proposed in this [paper](https://arxiv.org/abs/1912.03263).\n", "\n", "In this part of the analysis, we want to test the out-of-distribution capability of our energy-based model.\n", "Remember that a lower output of the model denotes a low probability.\n", "Thus, we hope to see low scores if we enter random noise to the model:"]}, {"cell_type": "code", "execution_count": 16, "id": "42be0f85", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:06.832318Z", "iopub.status.busy": "2023-03-14T15:59:06.831748Z", "iopub.status.idle": "2023-03-14T15:59:06.839196Z", "shell.execute_reply": "2023-03-14T15:59:06.838501Z"}, "papermill": {"duration": 0.024695, "end_time": "2023-03-14T15:59:06.841430", "exception": false, "start_time": "2023-03-14T15:59:06.816735", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Average score for random images: -17.88\n"]}], "source": ["with torch.no_grad():\n", " rand_imgs = torch.rand((128,) + model.hparams.img_shape).to(model.device)\n", " rand_imgs = rand_imgs * 2 - 1.0\n", " rand_out = model.cnn(rand_imgs).mean()\n", " print(\"Average score for random images: %4.2f\" % (rand_out.item()))"]}, {"cell_type": "markdown", "id": "586b4c58", "metadata": {"papermill": {"duration": 0.013286, "end_time": "2023-03-14T15:59:06.871464", "exception": false, "start_time": "2023-03-14T15:59:06.858178", "status": "completed"}, "tags": []}, "source": ["As we hoped, the model assigns very low probability to those noisy images.\n", "As another reference, let's look at predictions for a batch of images from the training set:"]}, {"cell_type": "code", "execution_count": 17, "id": "97d01c5a", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:06.899469Z", "iopub.status.busy": "2023-03-14T15:59:06.899102Z", "iopub.status.idle": "2023-03-14T15:59:07.455693Z", "shell.execute_reply": "2023-03-14T15:59:07.454817Z"}, "papermill": {"duration": 0.573156, "end_time": "2023-03-14T15:59:07.458027", "exception": false, "start_time": "2023-03-14T15:59:06.884871", "status": "completed"}, "tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Average score for training images: -0.01\n"]}], "source": ["with torch.no_grad():\n", " train_imgs, _ = next(iter(train_loader))\n", " train_imgs = train_imgs.to(model.device)\n", " train_out = model.cnn(train_imgs).mean()\n", " print(\"Average score for training images: %4.2f\" % (train_out.item()))"]}, {"cell_type": "markdown", "id": "08252820", "metadata": {"lines_to_next_cell": 2, "papermill": {"duration": 0.013507, "end_time": "2023-03-14T15:59:07.490940", "exception": false, "start_time": "2023-03-14T15:59:07.477433", "status": "completed"}, "tags": []}, "source": ["The scores are close to 0 because of the regularization objective that was added to the training.\n", "So clearly, the model can distinguish between noise and real digits.\n", "However, what happens if we change the training images a little, and see which ones gets a very low score?"]}, {"cell_type": "code", "execution_count": 18, "id": "318af4cc", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:07.520192Z", "iopub.status.busy": "2023-03-14T15:59:07.519569Z", "iopub.status.idle": "2023-03-14T15:59:07.530363Z", "shell.execute_reply": "2023-03-14T15:59:07.529836Z"}, "papermill": {"duration": 0.027233, "end_time": "2023-03-14T15:59:07.531846", "exception": false, "start_time": "2023-03-14T15:59:07.504613", "status": "completed"}, "tags": []}, "outputs": [], "source": ["@torch.no_grad()\n", "def compare_images(img1, img2):\n", " imgs = torch.stack([img1, img2], dim=0).to(model.device)\n", " score1, score2 = model.cnn(imgs).cpu().chunk(2, dim=0)\n", " grid = torchvision.utils.make_grid(\n", " [img1.cpu(), img2.cpu()], nrow=2, normalize=True, range=(-1, 1), pad_value=0.5, padding=2\n", " )\n", " grid = grid.permute(1, 2, 0)\n", " plt.figure(figsize=(4, 4))\n", " plt.imshow(grid)\n", " plt.xticks([(img1.shape[2] + 2) * (0.5 + j) for j in range(2)], labels=[\"Original image\", \"Transformed image\"])\n", " plt.yticks([])\n", " plt.show()\n", " print(\"Score original image: %4.2f\" % score1)\n", " print(\"Score transformed image: %4.2f\" % score2)"]}, {"cell_type": "markdown", "id": "05f5cc25", "metadata": {"papermill": {"duration": 0.013362, "end_time": "2023-03-14T15:59:07.561894", "exception": false, "start_time": "2023-03-14T15:59:07.548532", "status": "completed"}, "tags": []}, "source": ["We use a random test image for this. Feel free to change it to experiment with the model yourself."]}, {"cell_type": "code", "execution_count": 19, "id": "523d81e3", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:07.589832Z", "iopub.status.busy": "2023-03-14T15:59:07.589625Z", "iopub.status.idle": "2023-03-14T15:59:08.056637Z", "shell.execute_reply": "2023-03-14T15:59:08.055388Z"}, "papermill": {"duration": 0.484654, "end_time": "2023-03-14T15:59:08.059991", "exception": false, "start_time": "2023-03-14T15:59:07.575337", "status": "completed"}, "tags": []}, "outputs": [], "source": ["test_imgs, _ = next(iter(test_loader))\n", "exmp_img = test_imgs[0].to(model.device)"]}, {"cell_type": "markdown", "id": "6f8a648f", "metadata": {"papermill": {"duration": 0.013464, "end_time": "2023-03-14T15:59:08.094097", "exception": false, "start_time": "2023-03-14T15:59:08.080633", "status": "completed"}, "tags": []}, "source": ["The first transformation is to add some random noise to the image:"]}, {"cell_type": "code", "execution_count": 20, "id": "35b1aad4", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:08.123319Z", "iopub.status.busy": "2023-03-14T15:59:08.122895Z", "iopub.status.idle": "2023-03-14T15:59:08.222527Z", "shell.execute_reply": "2023-03-14T15:59:08.221947Z"}, "papermill": {"duration": 0.118971, "end_time": "2023-03-14T15:59:08.226698", "exception": false, "start_time": "2023-03-14T15:59:08.107727", "status": "completed"}, "tags": []}, "outputs": [{"data": {"application/pdf": "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M0lm675IsZnCeV04s/4MU2a1eSfPcqLUqQjvsWdL0NA5rp69lllodJsTvKSEz8ZOT06+VzPrITkVCaliWlfBaRSZYgnbEl9TUVOaehn++/Lu8Tt+/gEsc3xzCmVuZHN0cmVhbQplbmRvYmoKMzIgMCBvYmoKPDwgL0xlbmd0aCAxOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJwzNrRQMIDDFEOuNAAd5gNSCmVuZHN0cmVhbQplbmRvYmoKMTYgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL0Jhc2VGb250IC9CTVFRRFYrRGVqYVZ1U2FucyAvRmlyc3RDaGFyIDAgL0xhc3RDaGFyIDI1NQovRm9udERlc2NyaXB0b3IgMTUgMCBSIC9TdWJ0eXBlIC9UeXBlMyAvTmFtZSAvQk1RUURWK0RlamFWdVNhbnMKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDE3IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSA3OSAvTyA4NCAvVCA5NyAvYSAxMDAgL2QgL2UgL2YgL2cgMTA1IC9pIDEwOCAvbCAvbSAvbiAvbyAxMTQKL3IgL3MgXQo+PgovV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTcgMCBvYmoKPDwgL08gMTggMCBSIC9UIDE5IDAgUiAvYSAyMCAwIFIgL2QgMjEgMCBSIC9lIDIyIDAgUiAvZiAyMyAwIFIgL2cgMjQgMCBSCi9pIDI1IDAgUiAvbCAyNiAwIFIgL20gMjcgMCBSIC9uIDI4IDAgUiAvbyAyOSAwIFIgL3IgMzAgMCBSIC9zIDMxIDAgUgovc3BhY2UgMzIgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNiAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDEgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0kxIDEzIDAgUiA+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAzMTAgL0hlaWdodCAxNjEKL0NvbG9yU3BhY2UgWy9JbmRleGVkIC9EZXZpY2VSR0IgMTYwICj////+/v79/f38/Pz7+/v6+vr5+fn4+Pjy8vLx8fHw8PDu7u7s7Ozq6urp6enn5+fl5eXj4+Ph4eHg4ODf39/e3t7d3d3b29va2trY2NjU1NTR0dHPz8/Ozs7Nzc3Ly8vJycnGxsbCwsLAwMC/v7++vr67u7u6urq5ubm2tra1tbWysrKxsbGtra2qqqqnp6empqajo6OioqKhoaGfn5+bm5uampqZmZmXl5ePj4+Ojo6MjIyLi4uGhoaFhYWDg4OCgoKBgYF/f39+fn57e3t5eXl3d3dzc3NycnJubm5tbW1ra2tqampkZGRgYGBcXFxcXFxXV1dVVVVUVFRTU1NPT09OTk5NTU1LS0tJSUlISEhHR0dGRkZFRUVERERDQ0NCQkJBQUE/Pz8+Pj49PT08PDw7Ozs6Ojo5OTk4ODg3Nzc2NjY1NTU0NDQzMzMyMjIxMTEwMDAvLy8uLi4tLS0sLCwrKysqKipcKVwpXClcKFwoXCgn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b2GyiKxJwuSIz+4T3EKyLWN67NcYbdG2iGiLtgaWiLa9xYD9dIfiqNgekc+c5XgufPLeVXKq39fHxMvG4gzR1zzKS+/M3/Upe0K6MiTaoi3aOqKtibnWtv7oi6qU4CGLxVb+rIyPAZMnPmXQjQE7X2APR9pjq8apBYTRFm3R1hFtTWxA2sJwoq2JaGsi2pqItiairYloayLamoi2JqKtiX8BK2SpbQplbmRzdHJlYW0KZW5kb2JqCjMzIDAgb2JqCjE3MTYKZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTEgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjM0IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjYuMSkgL0NyZWF0aW9uRGF0ZSAoRDoyMDIzMDMxNDE1NTkwOFopCj4+CmVuZG9iagp4cmVmCjAgMzUKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMDkyMDUgMDAwMDAgbiAKMDAwMDAwNjUxOCAwMDAwMCBuIAowMDAwMDA2NTUwIDAwMDAwIG4gCjAwMDAwMDY2NDkgMDAwMDAgbiAKMDAwMDAwNjY3MCAwMDAwMCBuIAowMDAwMDA2NjkxIDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDMzOSAwMDAwMCBuIAowMDAwMDAwNzcyIDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMDc1MiAwMDAwMCBuIAowMDAwMDA2NzIzIDAwMDAwIG4gCjAwMDAwMDUyODkgMDAwMDAgbiAKMDAwMDAwNTA4MiAwMDAwMCBuIAowMDAwMDA0Njk4IDAwMDAwIG4gCjAwMDAwMDYzNDIgMDAwMDAgbiAKMDAwMDAwMDc5MiAwMDAwMCBuIAowMDAwMDAxMDgwIDAwMDAwIG4gCjAwMDAwMDEyMTggMDAwMDAgbiAKMDAwMDAwMTU5OCAwMDAwMCBuIAowMDAwMDAxOTAyIDAwMDAwIG4gCjAwMDAwMDIyMjQgMDAwMDAgbiAKMDAwMDAwMjQzMyAwMDAwMCBuIAowMDAwMDAyODQ3IDAwMDAwIG4gCjAwMDAwMDI5OTEgMDAwMDAgbiAKMDAwMDAwMzExMCAwMDAwMCBuIAowMDAwMDAzNDQxIDAwMDAwIG4gCjAwMDAwMDM2NzcgMDAwMDAgbiAKMDAwMDAwMzk2OCAwMDAwMCBuIAowMDAwMDA0MjAxIDAwMDAwIG4gCjAwMDAwMDQ2MDggMDAwMDAgbiAKMDAwMDAwOTE4NCAwMDAwMCBuIAowMDAwMDA5MjY1IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMzUgL1Jvb3QgMSAwIFIgL0luZm8gMzQgMCBSID4+CnN0YXJ0eHJlZgo5NDE2CiUlRU9GCg==", "image/svg+xml": ["\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-03-14T15:59:08.160228\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.6.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n"], "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}, {"name": "stdout", "output_type": "stream", "text": ["Score original image: 0.03\n", "Score transformed image: -0.07\n"]}], "source": ["img_noisy = exmp_img + torch.randn_like(exmp_img) * 0.3\n", "img_noisy.clamp_(min=-1.0, max=1.0)\n", "compare_images(exmp_img, img_noisy)"]}, {"cell_type": "markdown", "id": "ed24f660", "metadata": {"papermill": {"duration": 0.014218, "end_time": "2023-03-14T15:59:08.264888", "exception": false, "start_time": "2023-03-14T15:59:08.250670", "status": "completed"}, "tags": []}, "source": ["We can see that the score considerably drops.\n", "Hence, the model can detect random Gaussian noise on the image.\n", "This is also to expect as initially, the \"fake\" samples are pure noise images.\n", "\n", "Next, we flip an image and check how this influences the score:"]}, {"cell_type": "code", "execution_count": 21, "id": "f7ab7e9a", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:08.294357Z", "iopub.status.busy": "2023-03-14T15:59:08.294180Z", "iopub.status.idle": "2023-03-14T15:59:08.371407Z", "shell.execute_reply": "2023-03-14T15:59:08.370938Z"}, "papermill": {"duration": 0.095852, "end_time": "2023-03-14T15:59:08.374857", "exception": false, "start_time": "2023-03-14T15:59:08.279005", "status": "completed"}, "tags": []}, "outputs": [{"data": {"application/pdf": "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M0lm675IsZnCeV04s/4MU2a1eSfPcqLUqQjvsWdL0NA5rp69lllodJsTvKSEz8ZOT06+VzPrITkVCaliWlfBaRSZYgnbEl9TUVOaehn++/Lu8Tt+/gEsc3xzCmVuZHN0cmVhbQplbmRvYmoKMzIgMCBvYmoKPDwgL0xlbmd0aCAxOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJwzNrRQMIDDFEOuNAAd5gNSCmVuZHN0cmVhbQplbmRvYmoKMTYgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL0Jhc2VGb250IC9CTVFRRFYrRGVqYVZ1U2FucyAvRmlyc3RDaGFyIDAgL0xhc3RDaGFyIDI1NQovRm9udERlc2NyaXB0b3IgMTUgMCBSIC9TdWJ0eXBlIC9UeXBlMyAvTmFtZSAvQk1RUURWK0RlamFWdVNhbnMKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDE3IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSA3OSAvTyA4NCAvVCA5NyAvYSAxMDAgL2QgL2UgL2YgL2cgMTA1IC9pIDEwOCAvbCAvbSAvbiAvbyAxMTQKL3IgL3MgXQo+PgovV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4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tmUpuJ9u/cA+x+uDbBGyRcgWIVukU7bZWfRVZKtAtgjZImSLTMyGcmSLkC1CtgjZImSLkC1CtgjZImSL/AFtYK8qCmVuZHN0cmVhbQplbmRvYmoKMzMgMCBvYmoKOTk2CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDExIDAgUiBdIC9Db3VudCAxID4+CmVuZG9iagozNCAwIG9iago8PCAvQ3JlYXRvciAoTWF0cGxvdGxpYiB2My42LjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My42LjEpIC9DcmVhdGlvbkRhdGUgKEQ6MjAyMzAzMTQxNTU5MDhaKQo+PgplbmRvYmoKeHJlZgowIDM1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDA4MjA0IDAwMDAwIG4gCjAwMDAwMDY1MTggMDAwMDAgbiAKMDAwMDAwNjU1MCAwMDAwMCBuIAowMDAwMDA2NjQ5IDAwMDAwIG4gCjAwMDAwMDY2NzAgMDAwMDAgbiAKMDAwMDAwNjY5MSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzMzkgMDAwMDAgbiAKMDAwMDAwMDc3MiAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDA3NTIgMDAwMDAgbiAKMDAwMDAwNjcyMyAwMDAwMCBuIAowMDAwMDA1Mjg5IDAwMDAwIG4gCjAwMDAwMDUwODIgMDAwMDAgbiAKMDAwMDAwNDY5OCAwMDAwMCBuIAowMDAwMDA2MzQyIDAwMDAwIG4gCjAwMDAwMDA3OTIgMDAwMDAgbiAKMDAwMDAwMTA4MCAwMDAwMCBuIAowMDAwMDAxMjE4IDAwMDAwIG4gCjAwMDAwMDE1OTggMDAwMDAgbiAKMDAwMDAwMTkwMiAwMDAwMCBuIAowMDAwMDAyMjI0IDAwMDAwIG4gCjAwMDAwMDI0MzMgMDAwMDAgbiAKMDAwMDAwMjg0NyAwMDAwMCBuIAowMDAwMDAyOTkxIDAwMDAwIG4gCjAwMDAwMDMxMTAgMDAwMDAgbiAKMDAwMDAwMzQ0MSAwMDAwMCBuIAowMDAwMDAzNjc3IDAwMDAwIG4gCjAwMDAwMDM5NjggMDAwMDAgbiAKMDAwMDAwNDIwMSAwMDAwMCBuIAowMDAwMDA0NjA4IDAwMDAwIG4gCjAwMDAwMDgxODQgMDAwMDAgbiAKMDAwMDAwODI2NCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDM1IC9Sb290IDEgMCBSIC9JbmZvIDM0IDAgUiA+PgpzdGFydHhyZWYKODQxNQolJUVPRgo=", "image/svg+xml": ["\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-03-14T15:59:08.323090\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.6.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n"], "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}, {"name": "stdout", "output_type": "stream", "text": ["Score original image: 0.03\n", "Score transformed image: -0.00\n"]}], "source": ["img_flipped = exmp_img.flip(dims=(1, 2))\n", "compare_images(exmp_img, img_flipped)"]}, {"cell_type": "markdown", "id": "54f446b8", "metadata": {"papermill": {"duration": 0.014813, "end_time": "2023-03-14T15:59:08.409672", "exception": false, "start_time": "2023-03-14T15:59:08.394859", "status": "completed"}, "tags": []}, "source": ["If the digit can only be read in this way, for example, the 7, then we can see that the score drops.\n", "However, the score only drops slightly.\n", "This is likely because of the small size of our model.\n", "Keep in mind that generative modeling is a much harder task than classification,\n", "as we do not only need to distinguish between classes but learn **all** details/characteristics of the digits.\n", "With a deeper model, this could eventually be captured better (but at the cost of greater training instability).\n", "\n", "Finally, we check what happens if we reduce the digit significantly in size:"]}, {"cell_type": "code", "execution_count": 22, "id": "d48afe5b", "metadata": {"execution": {"iopub.execute_input": "2023-03-14T15:59:08.441543Z", "iopub.status.busy": "2023-03-14T15:59:08.440977Z", "iopub.status.idle": "2023-03-14T15:59:08.523677Z", "shell.execute_reply": "2023-03-14T15:59:08.522985Z"}, "papermill": {"duration": 0.102139, "end_time": "2023-03-14T15:59:08.526830", "exception": false, "start_time": "2023-03-14T15:59:08.424691", "status": "completed"}, "tags": []}, "outputs": [{"data": {"application/pdf": "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M0lm675IsZnCeV04s/4MU2a1eSfPcqLUqQjvsWdL0NA5rp69lllodJsTvKSEz8ZOT06+VzPrITkVCaliWlfBaRSZYgnbEl9TUVOaehn++/Lu8Tt+/gEsc3xzCmVuZHN0cmVhbQplbmRvYmoKMzIgMCBvYmoKPDwgL0xlbmd0aCAxOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJwzNrRQMIDDFEOuNAAd5gNSCmVuZHN0cmVhbQplbmRvYmoKMTYgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL0Jhc2VGb250IC9CTVFRRFYrRGVqYVZ1U2FucyAvRmlyc3RDaGFyIDAgL0xhc3RDaGFyIDI1NQovRm9udERlc2NyaXB0b3IgMTUgMCBSIC9TdWJ0eXBlIC9UeXBlMyAvTmFtZSAvQk1RUURWK0RlamFWdVNhbnMKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDE3IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSA3OSAvTyA4NCAvVCA5NyAvYSAxMDAgL2QgL2UgL2YgL2cgMTA1IC9pIDEwOCAvbCAvbSAvbiAvbyAxMTQKL3IgL3MgXQo+PgovV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4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Ci9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My42LjEpIC9DcmVhdGlvbkRhdGUgKEQ6MjAyMzAzMTQxNTU5MDhaKQo+PgplbmRvYmoKeHJlZgowIDM1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDA3OTc2IDAwMDAwIG4gCjAwMDAwMDY1MTggMDAwMDAgbiAKMDAwMDAwNjU1MCAwMDAwMCBuIAowMDAwMDA2NjQ5IDAwMDAwIG4gCjAwMDAwMDY2NzAgMDAwMDAgbiAKMDAwMDAwNjY5MSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzMzkgMDAwMDAgbiAKMDAwMDAwMDc3MiAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDA3NTIgMDAwMDAgbiAKMDAwMDAwNjcyMyAwMDAwMCBuIAowMDAwMDA1Mjg5IDAwMDAwIG4gCjAwMDAwMDUwODIgMDAwMDAgbiAKMDAwMDAwNDY5OCAwMDAwMCBuIAowMDAwMDA2MzQyIDAwMDAwIG4gCjAwMDAwMDA3OTIgMDAwMDAgbiAKMDAwMDAwMTA4MCAwMDAwMCBuIAowMDAwMDAxMjE4IDAwMDAwIG4gCjAwMDAwMDE1OTggMDAwMDAgbiAKMDAwMDAwMTkwMiAwMDAwMCBuIAowMDAwMDAyMjI0IDAwMDAwIG4gCjAwMDAwMDI0MzMgMDAwMDAgbiAKMDAwMDAwMjg0NyAwMDAwMCBuIAowMDAwMDAyOTkxIDAwMDAwIG4gCjAwMDAwMDMxMTAgMDAwMDAgbiAKMDAwMDAwMzQ0MSAwMDAwMCBuIAowMDAwMDAzNjc3IDAwMDAwIG4gCjAwMDAwMDM5NjggMDAwMDAgbiAKMDAwMDAwNDIwMSAwMDAwMCBuIAowMDAwMDA0NjA4IDAwMDAwIG4gCjAwMDAwMDc5NTYgMDAwMDAgbiAKMDAwMDAwODAzNiAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDM1IC9Sb290IDEgMCBSIC9JbmZvIDM0IDAgUiA+PgpzdGFydHhyZWYKODE4NwolJUVPRgo=", "image/svg+xml": ["\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-03-14T15:59:08.476032\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.6.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n"], "text/plain": ["
"]}, "metadata": {}, "output_type": "display_data"}, {"name": "stdout", "output_type": "stream", "text": ["Score original image: 0.03\n", "Score transformed image: -0.02\n"]}], "source": ["img_tiny = torch.zeros_like(exmp_img) - 1\n", "img_tiny[:, exmp_img.shape[1] // 2 :, exmp_img.shape[2] // 2 :] = exmp_img[:, ::2, ::2]\n", "compare_images(exmp_img, img_tiny)"]}, {"cell_type": "markdown", "id": "29f3c0f8", "metadata": {"papermill": {"duration": 0.015467, "end_time": "2023-03-14T15:59:08.562835", "exception": false, "start_time": "2023-03-14T15:59:08.547368", "status": "completed"}, "tags": []}, "source": ["The score again drops but not by a large margin, although digits in the MNIST dataset usually are much larger.\n", "\n", "Overall, we can conclude that our model is good for detecting Gaussian noise and smaller transformations to existing digits.\n", "Nonetheless, to obtain a very good out-of-distribution model, we would need to train deeper models and for more iterations."]}, {"cell_type": "markdown", "id": "d5f64a16", "metadata": {"papermill": {"duration": 0.016615, "end_time": "2023-03-14T15:59:08.606471", "exception": false, "start_time": "2023-03-14T15:59:08.589856", "status": "completed"}, "tags": []}, "source": ["### Instability\n", "\n", "Finally, we should discuss the possible instabilities of energy-based models,\n", "in particular for the example of image generation that we have implemented in this notebook.\n", "In the process of hyperparameter search for this notebook, there have been several models that diverged.\n", "Divergence in energy-based models means that the models assign a high probability to examples of the training set which is a good thing.\n", "However, at the same time, the sampling algorithm fails and only generates noise images that obtain minimal probability scores.\n", "This happens because the model has created many local maxima in which the generated noise images fall.\n", "The energy surface over which we calculate the gradients to reach data points with high probability has \"diverged\" and is not useful for our MCMC sampling.\n", "\n", "Besides finding the optimal hyperparameters, a common trick in energy-based models is to reload stable checkpoints.\n", "If we detect that the model is diverging, we stop the training, load the model from one epoch ago where it did not diverge yet.\n", "Afterward, we continue training and hope that with a different seed the model is not diverging again.\n", "Nevertheless, this should be considered as the \"last hope\" for stabilizing the models,\n", "and careful hyperparameter tuning is the better way to do so.\n", "Sensitive hyperparameters include `step_size`, `steps` and the noise standard deviation in the sampler,\n", "and the learning rate and feature dimensionality in the CNN model."]}, {"cell_type": "markdown", "id": "d58a2c18", "metadata": {"papermill": {"duration": 0.015475, "end_time": "2023-03-14T15:59:08.637639", "exception": false, "start_time": "2023-03-14T15:59:08.622164", "status": "completed"}, "tags": []}, "source": ["## Conclusion\n", "\n", "In this tutorial, we have discussed energy-based models for generative modeling.\n", "The concept relies on the idea that any strictly positive function can be turned into a probability\n", "distribution by normalizing over the whole dataset.\n", "As this is not reasonable to calculate for high dimensional data like images,\n", "we train the model using contrastive divergence and sampling via MCMC.\n", "While the idea allows us to turn any neural network into an energy-based model,\n", "we have seen that there are multiple training tricks needed to stabilize the training.\n", "Furthermore, the training time of these models is relatively long as, during every training iteration,\n", "we need to sample new \"fake\" images, even with a sampling buffer.\n", "In the next lectures and assignment, we will see different generative models (e.g. VAE, GAN, NF)\n", "that allow us to do generative modeling more stably, but with the cost of more parameters."]}, {"cell_type": "markdown", "id": "077d2fa3", "metadata": {"papermill": {"duration": 0.015393, "end_time": "2023-03-14T15:59:08.668614", "exception": false, "start_time": "2023-03-14T15:59:08.653221", "status": "completed"}, "tags": []}, "source": ["## Congratulations - Time to Join the Community!\n", "\n", "Congratulations on completing this notebook tutorial! If you enjoyed this and would like to join the Lightning\n", "movement, you can do so in the following ways!\n", "\n", "### Star [Lightning](https://github.com/Lightning-AI/lightning) on GitHub\n", "The easiest way to help our community is just by starring the GitHub repos! This helps raise awareness of the cool\n", "tools we're building.\n", "\n", "### Join our [Slack](https://www.pytorchlightning.ai/community)!\n", "The best way to keep up to date on the latest advancements is to join our community! Make sure to introduce yourself\n", "and share your interests in `#general` channel\n", "\n", "\n", "### Contributions !\n", "The best way to contribute to our community is to become a code contributor! At any time you can go to\n", "[Lightning](https://github.com/Lightning-AI/lightning) or [Bolt](https://github.com/Lightning-AI/lightning-bolts)\n", "GitHub Issues page and filter for \"good first issue\".\n", "\n", "* [Lightning good first issue](https://github.com/Lightning-AI/lightning/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)\n", "* [Bolt good first issue](https://github.com/Lightning-AI/lightning-bolts/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)\n", "* You can also contribute your own notebooks with useful examples !\n", "\n", "### Great thanks from the entire Pytorch Lightning Team for your interest !\n", "\n", "[![Pytorch Lightning](data:image/png;base64,NDA0OiBOb3QgRm91bmQ=){height=\"60px\" width=\"240px\"}](https://pytorchlightning.ai)"]}, {"cell_type": "raw", "metadata": {"raw_mimetype": "text/restructuredtext"}, "source": [".. customcarditem::\n", " :header: Tutorial 7: Deep Energy-Based Generative Models\n", " :card_description: In this tutorial, we will look at energy-based deep learning models, and focus on their application as generative models. Energy models have been a popular tool before the...\n", " :tags: Image,GPU/TPU,UvA-DL-Course\n", " :image: _static/images/course_UvA-DL/07-deep-energy-based-generative-models.jpg"]}], "metadata": {"jupytext": {"cell_metadata_filter": "colab,colab_type,id,-all", "formats": "ipynb,py:percent", "main_language": "python"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16"}, "papermill": {"default_parameters": {}, "duration": 20.325164, "end_time": "2023-03-14T15:59:11.709038", "environment_variables": {}, "exception": null, "input_path": "course_UvA-DL/07-deep-energy-based-generative-models/Deep_Energy_Models.ipynb", "output_path": ".notebooks/course_UvA-DL/07-deep-energy-based-generative-models.ipynb", "parameters": {}, "start_time": "2023-03-14T15:58:51.383874", "version": "2.4.0"}, "widgets": {"application/vnd.jupyter.widget-state+json": {"state": {"0995e6a155ea4407926198b2b18c3a36": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null}}, "0d8f692776f845aba9d8bf8d7352008a": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null}}, "1259d770c1e64016bef07f0ff90172e4": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": ["IPY_MODEL_3386cca92e854f7a8492763340019a5d", "IPY_MODEL_a9f7776a4dcf4a26adfdc5f9ee3080a7", "IPY_MODEL_376958da77e74d61933770892aedae8d"], "layout": "IPY_MODEL_2b08611aaa3a46fab6b44ad5d9eea73c", "tabbable": null, "tooltip": null}}, "12ef6055184446a38a48cc6cea7d6e8c": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "1469846803d04730a5c279575977e5de": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "14eeb143f5704d2990c9dbd47e6ee046": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "1d2cd59801014e5fb7c15d31beaceb4a": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": ""}}, "28008b666ee24162b2be92bffe041a44": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "2b08611aaa3a46fab6b44ad5d9eea73c": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "3386cca92e854f7a8492763340019a5d": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_ee42a041b1e747afb5bce0a4b9dac456", "placeholder": "\u200b", "style": "IPY_MODEL_0d8f692776f845aba9d8bf8d7352008a", "tabbable": null, "tooltip": null, "value": "100%"}}, "338853557cc64b2ba3d801a0a671ea9a": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "376958da77e74d61933770892aedae8d": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_7269631e972f49d3b2f771c02ba5f9b8", "placeholder": "\u200b", "style": "IPY_MODEL_e574cb9fe3e1484f979ae2744c3bc136", "tabbable": null, "tooltip": null, "value": " 1648877/1648877 [00:00<00:00, 27249697.19it/s]"}}, "37e9bb9b9b034c2a90e3bf64d01d1d0e": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": ["IPY_MODEL_d07b5ef9f0a44af48deeefe22ece2dfe", "IPY_MODEL_d45015a1c521492fa735c0bf721c99f5", "IPY_MODEL_c28826774a5f474b8cd6dd0286bea810"], "layout": "IPY_MODEL_46035c7c71d24000b2801db639b68b18", "tabbable": null, "tooltip": null}}, "400dfaa4929d4ae2b92bd8adfda16e3d": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null}}, "4306824bfe49431899eecf14660f99c8": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": ""}}, "46035c7c71d24000b2801db639b68b18": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "49420ba7a0674c5b84bb5d738cf6541d": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_338853557cc64b2ba3d801a0a671ea9a", "max": 28881.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_4306824bfe49431899eecf14660f99c8", "tabbable": null, "tooltip": null, "value": 28881.0}}, "5a00657e1dea4c18bb9f3d2ca9727bc0": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null}}, "5a476e415316423996b14293e2de60da": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null}}, "5d686b0a1b064ade96c9fc8016169f91": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "5ec43ef124ba472db0a030952166e53b": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_7c1a2dffe30941a9b494509bac3ab4b0", "max": 9912422.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_9ab940d616e748248a7fe4735b5f4e0b", "tabbable": null, "tooltip": null, "value": 9912422.0}}, "60ca12e5a85d4878aea31bc48813169c": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null}}, "64e3f8877ce94354b2b72433816d883b": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "7269631e972f49d3b2f771c02ba5f9b8": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "7c1a2dffe30941a9b494509bac3ab4b0": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "7e4580a731e84223b7103395a5e6c0ad": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "834b95bcb6f54872ac6303ec7824dbf1": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_64e3f8877ce94354b2b72433816d883b", "placeholder": "\u200b", "style": "IPY_MODEL_0995e6a155ea4407926198b2b18c3a36", "tabbable": null, "tooltip": null, "value": " 28881/28881 [00:00<00:00, 3003314.67it/s]"}}, "8504ead1c7bf48ad8b771301e44a52b9": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "9108c04ec5cb429e8d9d9b165545ab7f": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null}}, "969e6bf1e9fd47dea72417209a7e8051": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "9ab940d616e748248a7fe4735b5f4e0b": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": ""}}, "9c8065ec132042c6b1e3c2778e68f17c": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "a7290bccaa27411c89d0d556f03ed886": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": ""}}, "a9f7776a4dcf4a26adfdc5f9ee3080a7": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_12ef6055184446a38a48cc6cea7d6e8c", "max": 1648877.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_1d2cd59801014e5fb7c15d31beaceb4a", "tabbable": null, "tooltip": null, "value": 1648877.0}}, "bb9d5297216d46668b2e4df4fb0cc3f8": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": ["IPY_MODEL_db80f399d6c64d07bdfa5cc03b2f602b", "IPY_MODEL_49420ba7a0674c5b84bb5d738cf6541d", "IPY_MODEL_834b95bcb6f54872ac6303ec7824dbf1"], "layout": "IPY_MODEL_7e4580a731e84223b7103395a5e6c0ad", "tabbable": null, "tooltip": null}}, "c28826774a5f474b8cd6dd0286bea810": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_5d686b0a1b064ade96c9fc8016169f91", "placeholder": "\u200b", "style": "IPY_MODEL_5a00657e1dea4c18bb9f3d2ca9727bc0", "tabbable": null, "tooltip": null, "value": " 4542/4542 [00:00<00:00, 420810.87it/s]"}}, "c8fb6ae1668540098e15137183eec431": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_28008b666ee24162b2be92bffe041a44", "placeholder": "\u200b", "style": "IPY_MODEL_9108c04ec5cb429e8d9d9b165545ab7f", "tabbable": null, "tooltip": null, "value": " 9912422/9912422 [00:00<00:00, 43018188.29it/s]"}}, "d07b5ef9f0a44af48deeefe22ece2dfe": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_14eeb143f5704d2990c9dbd47e6ee046", "placeholder": "\u200b", "style": "IPY_MODEL_400dfaa4929d4ae2b92bd8adfda16e3d", "tabbable": null, "tooltip": null, "value": "100%"}}, "d45015a1c521492fa735c0bf721c99f5": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_969e6bf1e9fd47dea72417209a7e8051", "max": 4542.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_a7290bccaa27411c89d0d556f03ed886", "tabbable": null, "tooltip": null, "value": 4542.0}}, "db80f399d6c64d07bdfa5cc03b2f602b": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_8504ead1c7bf48ad8b771301e44a52b9", "placeholder": "\u200b", "style": "IPY_MODEL_5a476e415316423996b14293e2de60da", "tabbable": null, "tooltip": null, "value": "100%"}}, "e4a7ceab14c749b38562cb17e22a7ec7": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": ["IPY_MODEL_eff4c3831f594f0d803d15e292ec8412", "IPY_MODEL_5ec43ef124ba472db0a030952166e53b", "IPY_MODEL_c8fb6ae1668540098e15137183eec431"], "layout": "IPY_MODEL_1469846803d04730a5c279575977e5de", "tabbable": null, "tooltip": null}}, "e574cb9fe3e1484f979ae2744c3bc136": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": {"_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null}}, "ee42a041b1e747afb5bce0a4b9dac456": {"model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {"_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null}}, "eff4c3831f594f0d803d15e292ec8412": {"model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": {"_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_9c8065ec132042c6b1e3c2778e68f17c", "placeholder": "\u200b", "style": "IPY_MODEL_60ca12e5a85d4878aea31bc48813169c", "tabbable": null, "tooltip": null, "value": "100%"}}}, "version_major": 2, "version_minor": 0}}}, "nbformat": 4, "nbformat_minor": 5}