{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Denoising Diffusion Probabilistic Models (DDPMs) with fastai\n", "By Tanishq Abraham\n", "\n", "In this notebook, we will implement [Denoising Diffusion Probabilistic Models](https://arxiv.org/abs/2006.11239), a seminal paper in the diffusion model literature.\n", "\n", "A one-sentence summary: Train a denoising model conditioned on the amount of noise present in the image, and generate samples by iteratively denoising from pure noise to a final sample.\n", "\n", "Let's get started with the implementation!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports\n", "\n", "Here are all our imports. The unet file is taken from [lucidrains' DDPM implementation](https://github.com/lucidrains/denoising-diffusion-pytorch) just to focus on implementing the training process rather than architectural details." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "rCPJR6JRrqUp" }, "outputs": [], "source": [ "from fastai.vision.all import *\n", "from fastai.vision.gan import *\n", "from unet import Unet\n", "from copy import deepcopy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataloading\n", "\n", "Let's load our data. We'll work with the famous CIFAR10 dataset." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "okr8kAqSvIUD" }, "outputs": [], "source": [ "bs = 256 # batch size\n", "size = 32 # image size" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "B8nsEdKXvKim" }, "outputs": [], "source": [ "path = untar_data(URLs.CIFAR)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the highly flexible DataBlock API in fastai to create our DataLoaders.\n", "\n", "Note that we start with pure noise, generated with the obviously named `generate_noise` function." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "DQF8UdVvvP4R" }, "outputs": [], "source": [ "dblock = DataBlock(blocks = (TransformBlock, ImageBlock),\n", " get_x = partial(generate_noise, size=(3,size,size)),\n", " get_items = get_image_files,\n", " splitter = IndexSplitter(range(bs)),\n", " item_tfms=Resize(size), \n", " batch_tfms = Normalize.from_stats(torch.tensor([0.5]), torch.tensor([0.5])))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "id": "L6iHHHFRvRPx" }, "outputs": [], "source": [ "dls = dblock.dataloaders(path, path=path, bs=bs)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "id": "ANw0OdjzvRvY" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dls.show_batch(max_n=8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A key aspect of the diffusion models is that our model has the same size input and output:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "XlII4jxmwUnS" }, "outputs": [], "source": [ "xb, yb = next(iter(dls.train))\n", "assert xb.shape == yb.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DDPM Training as a Callback\n", "\n", "DDPM is trained quite simply in a few steps:\n", "1. randomly select some timesteps in an iterative noising process.\n", "2. Add noise corresponding to this timestep to the original image. For increasing timesteps, the variance of the noise increases.\n", "3. Pass in this noisy image to our model\n", "4. Model is trained with an MSE loss between the model output and the amount of noise added to the image\n", "\n", "\n", "We will implement this in a callback. The callback will randomly select the timestep and create the noisy image before setting up our input and ground truth tensors for the model forward pass and loss calculation.\n", "\n", "After training, we need to sample from this model. This is an iterative denoising process starting from pure noise. We simply keep removing noise predicted by the neural network, but we do it with an expected noise schedule that is reverse of what we saw during training. This is also done in our callback.\n", "\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "N-IV1WO0wyMT" }, "outputs": [], "source": [ "class DDPMCallback(Callback):\n", " def __init__(self, n_steps, beta_min, beta_max, tensor_type=TensorImage):\n", " store_attr()\n", "\n", " def before_fit(self):\n", " self.beta = torch.linspace(self.beta_min, self.beta_max, self.n_steps).to(self.dls.device) # variance schedule, linearly increased with timestep\n", " self.alpha = 1. - self.beta \n", " self.alpha_bar = torch.cumprod(self.alpha, dim=0)\n", " self.sigma = torch.sqrt(self.beta)\n", "\n", "\n", " def before_batch_training(self):\n", " eps = self.tensor_type(self.xb[0]) # noise, x_T\n", " x0 = self.yb[0] # original images, x_0\n", " batch_size = x0.shape[0]\n", " t = torch.randint(0, self.n_steps, (batch_size,), device=x0.device, dtype=torch.long) # select random timesteps\n", " alpha_bar_t = self.alpha_bar[t].reshape(-1, 1, 1, 1)\n", " \n", " xt = torch.sqrt(alpha_bar_t)*x0 + torch.sqrt(1-alpha_bar_t)*eps #noisify the image\n", " self.learn.xb = (xt, t) # input to our model is noisy image and timestep\n", " self.learn.yb = (eps,) # ground truth is the noise \n", "\n", "\n", " def before_batch_sampling(self):\n", " xt = self.tensor_type(self.xb[0])\n", " for t in reversed(range(self.n_steps)):\n", " t_batch = torch.full((xt.shape[0],), t, device=xt.device, dtype=torch.long)\n", " z = torch.randn(xt.shape, device=xt.device) if t > 0 else torch.zeros(xt.shape, device=xt.device)\n", " alpha_t = self.alpha[t] # get noise level at current timestep\n", " alpha_bar_t = self.alpha_bar[t]\n", " sigma_t = self.sigma[t]\n", " alpha_bar_t_1 = self.alpha_bar[t-1] if t > 0 else torch.tensor(1, device=xt.device)\n", " beta_bar_t = 1 - alpha_bar_t\n", " beta_bar_t_1 = 1 - alpha_bar_t_1\n", " x0hat = (xt - torch.sqrt(beta_bar_t) * self.model(xt, t_batch))/torch.sqrt(alpha_bar_t)\n", " x0hat = torch.clamp(x0hat, -1, 1)\n", " xt = x0hat * torch.sqrt(alpha_bar_t_1)*(1-alpha_t)/beta_bar_t + xt * torch.sqrt(alpha_t)*beta_bar_t_1/beta_bar_t + sigma_t*z \n", " \n", " #xt = 1/torch.sqrt(alpha_t) * (xt - (1-alpha_t)/torch.sqrt(1-alpha_bar_t) * self.model(xt, t_batch)) + sigma_t*z # predict x_(t-1) in accordance to Algorithm 2 in paper\n", " self.learn.pred = (xt,)\n", " raise CancelBatchException\n", "\n", " def before_batch(self):\n", " if not hasattr(self, 'gather_preds'): self.before_batch_training()\n", " else: self.before_batch_sampling()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's now initialize our model:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "model = Unet(dim=32)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can create a fastai Learner with our DataLoaders, Callback (with the appropriate number of timesteps and noise schedule) and the simple MSE loss that we use to train DDPM." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "cGfe6KqaH0iP" }, "outputs": [], "source": [ "ddpm_learner = Learner(dls, model, cbs=[DDPMCallback(n_steps=1000, beta_min=0.0001, beta_max=0.02)], loss_func=nn.MSELoss())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's use fastai's amazing LR finder to select a good LR for training:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 300 }, "id": "i1N52U5QLEOp", "outputId": "6b691a2c-81ad-481f-d2b9-aa051cdbd947" }, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "SuggestedLRs(valley=4.365158383734524e-05)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEMCAYAAADeYiHoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxV9Z3/8dcnO9kghrAYICyyoyymbO5aRa2KtVaxiLtI1bbqtFOnY1tn2pl2Zvqr1daq2KK2tVK1at1arVbFBZeggAKyyBpZkrCHkP3z++NeJMUbSEhOzk3yfj4e95Hc8z3n3E++j8t9c8753u8xd0dERORACWEXICIi8UkBISIiMSkgREQkJgWEiIjEpIAQEZGYFBAiIhJTYAFhZnPMrMTMPmqkfbqZLY4+3jKz0Q3azjSz5Wa2ysxuDapGERFpXJBHEA8CZx6kfQ1wkrsfA/wImA1gZonA3cBZwAjgEjMbEWCdIiISQ1JQO3b3eWbW/yDtbzV4+jbQJ/r7eGCVu68GMLO5wFRg6aFes3v37t6/f6MvKSIiB1iwYEGZu+fFagssIJrpauCv0d/zgQ0N2oqBCU3ZSf/+/SkqKmrl0kREOi4zW9dYW+gBYWanEAmI4/ctirFao/OBmNlMYCZAv379Wr0+EZHOKtRRTGZ2DPAbYKq7b40uLgb6NlitD7CxsX24+2x3L3T3wry8mEdJIiJyGEILCDPrBzwBzHD3FQ2a3gMGm9kAM0sBpgFPh1GjiEhnFtgpJjN7BDgZ6G5mxcAPgWQAd78X+AGQC/zazABqo0cCtWZ2I/ACkAjMcfclQdUpIp1DTU0NxcXFVFZWhl1KKNLS0ujTpw/JyclN3sY60nTfhYWFrovUIhLLmjVryMrKIjc3l+h/SjsNd2fr1q3s3r2bAQMG/FObmS1w98JY2+mb1CLSKVRWVnbKcAAwM3Jzc5t99BT6KKZ4tXNvDWXlVeRmpNC1S/Ih31RVtXXs2lvL7soadlVGfrpDz+w0emWnkd0lqVO+MUXiSWf+N3g4f7sCImpXZQ1Fa7cx/5OtvL16G0s27qQ+evYtKcHIzUwhNyOVbunJVNbUUVFdR3lVLXuqatlTXUd1bf1B95+WnECv7DR6ZKfRrUsy2V2SyU5LJrtLEllpySQnGnX1Tr1Dfb1T797o2N4EgwSz6AMSEiK/JyZEH2YkJUbeDPXu1NY5dfVOnTv19fv32/DsYmKCkZacSGpSQuSRnEhaUgJpyYnRR/T3pERSkyPrdOZ/bCJBy8zMpLy8nLVr13LOOefw0UcxZy0KVKcPiMqaOi6+bz4ffhoJhJTEBMb268Y3Th1MQW462/ZUs3VPNVvLq9haXs2OvTWkpyTRPTOVzNQkMlKTSE9NjHzYp0U+7Pd96LvDll2VbNlVyeadlWzeVUnJ7irWb6tg197IkUZ5VW3YXXBYzCA1aX9opKcmRvojJdInmamJpKcmfRYoaUn7QyYjNYmstCSyUiP9lJUWeZ7dJZnkRJ31lDix+FF4+T9hZzF07QOn/QCOuSjsqtpUpw+ItOREBuVlctLQHkwceATj+uWQlpzYZq9fW1dPeVUtdfUeOSJIiBwVJCYYFuM7g070KMMdr4/8rPPIEUdd/T8/6j1y9LPvyCIpwbDoUcc+ZoZHt62qraeqto7Kmv0/K2v2/9xbU0dlTR1VtfuW72+rqKmjvDJyRFW8vYI91bVUVNV9ts+auqYNhuiSnEh2lySy05LJSU+hR3bqZ6fpenZNo2dWKkdkpNAtPYVu6QoUCcjiR+GZb0LN3sjznRsiz+GwQ+K73/0uBQUFXH/99QDcfvvtmBnz5s1j+/bt1NTU8OMf/5ipU6c2uo+6ujpuvfVWXn31Vaqqqrjhhhu47rrrmDFjBhdeeOFn206fPp2LL76Y884777Bq3UejmKRNRAKojr3VdeypqmNXZQ27o9dq9v3cVVkbPbKqYdfeWrZVVFO6u4rNOyvZW1MXc79ZaUnkpKeQk55Mt+jPnIwUctJTyM1MoU9OOn1zupCf04XUpLYLfok/y5YtY/jw4U1b+Y5RkVA4UNe+cPPhner54IMPuOmmm3jttdcAGDFiBH/729/o1q0b2dnZlJWVMXHiRFauXImZxTzFNHv2bEpKSrjtttuoqqriuOOO47HHHmP9+vXccccdPPXUU+zcuZMxY8awcuVKkpL++RggVh8cbBRTpz+CkLaRmGCkpySRnpJEbmbztnV3dlfVsmVnJVt2VbGtopodFdVs31PD9orq6CPy++qycrbvqfncqTsz6JmVRt8jutCraxd6d02jZ3baZz/75nQhLytV11UkYmdx85Y3wdixYykpKWHjxo2UlpaSk5ND7969ufnmm5k3bx4JCQl8+umnbNmyhV69esXcx4svvsjixYt5/PHHI+Xs3MnKlSs544wzuOGGGygpKeGJJ57gK1/5yufC4XAoICTumVn0Gk8yg3tmNWmb6tp6ysqrKN6+lw3bKtiwveKz3xcX7+DFJZVUHTCwID0lkX5HpDOgewYFuRkM7J7BsN5ZDOmZ1aanHSUOdO3TyBFEn88va4YLL7yQxx9/nM2bNzNt2jQefvhhSktLWbBgAcnJyfTv3/+gQ1HdnV/+8pdMmTLlc20zZszg4YcfZu7cucyZM6dFde6jgJAOKSUpgSO7deHIbl0YP+CIz7W7Ozsqati8q5JNO/dSvH0va8sqWLd1Dyu27OblZSVU10UCJDHBGJSXwfDe2Yzonc3QXlkM7ZVFr+w0HXF0VKf94J+vQQAkd4ksb4Fp06Zx7bXXUlZWxmuvvcajjz5Kjx49SE5O5pVXXmHdukYnVgVgypQp3HPPPZx66qkkJyezYsUK8vPzycjI4IorrmD8+PH06tWLkSNHtqjOfRQQ0imZWeRaRUYKw3tnf669rt7ZsK2CZZt2sXTTLpZu3MV7a7bxl4X7543MSktiaM8shvTKYkTvbMb07cbQXlm6cN4R7LsQ3cqjmEaOHMnu3bvJz8+nd+/eTJ8+nXPPPZfCwkLGjBnDsGHDDrr9Nddcw9q1axk3bhzuTl5eHk899RQAPXv2ZPjw4Zx//vktqrEhXaQWaYbte6pZsWU3K7bsZvmW3azYUs7yzbvZubcGiAz9HZXfldF9ujG6b1fG9cuhT04XHWnEgWZdpG6HKioqOProo3n//ffp2rVrzHV0kVokQDkZKUwYmMuEgbmfLXN3irfvZeGGHSzcsINFG3bw8DvrmPNm5BRVXlYqY/t2Y1xBDuP65TC6b1eNqJJW9dJLL3HVVVdxyy23NBoOh0MBIdJCZkbfI9Lpe0Q6544+EoCaunqWb97N++u388H6Hby/fjsvLt0CRL7rMWHgEZwwOI8TB3fnqB6ZOsKQFvniF7/I+vXrW32/CgiRACQnRk41jcrvymWTIsu2llexYN123lxVxusry/jR8sht1ntmp3LqsB6ce8yRTBiYS2KCwkLigwJCpI3kZqZyxshenDEyMsa9eHsFb6wsY97KUv6ycCOPvLuB7pmpnH10L84dfSTH9sshQWHRqty90x6tHc71Zl2kFokDe6vreGV5Cc8s2sg/Pi6hqrae3l3TOG/0kZw35khG9M7utB9srUX3g2j+/SAUECJxpryqlpeXbeGZRRt5dXkptfXO4B6ZnD82n/NGH0nfI9LDLrFd0h3lYt9RTgEh0k5t21PNcx9u4i8ffErRuu0ATBqYy9cm9GPKyF6kLH280884Ki2jgBDpADZsq+CpDz5l7nsb+HTHXqZ3eZvbbTbJ9Q3+R5zcBc69SyEhTaaAEOlA6uqdeStLOfqx4+heW/L5FVow46h0PvqinEgHkphgnDK0B9SWxmz3ncXU1tVryg9pMb2DRNqrRmYW/bQ+l5P/71V++8Ya9lbHvo+GSFMoIETaq9N+ELnm0IAnd2HH5Fvpk9OFHz27lBP+9xXmvLGGykZuuCRyMDrFJNJexZhx1E77AaOOuYg/Ae+t3cYdf1/Bfz67lPvmfcINpxzFxV/oq3mgpMkCu0htZnOAc4ASdx8Vo30Y8AAwDvh3d/9Zg7a1wG6gDqht7ALKgXSRWuTz5n+ylTteWsG7a7bRu2saN31xMBce21dTeghw8IvUQZ5iehA48yDt24BvAj9rpP0Udx/T1HAQkdgmDcrlTzMn8vA1E+jVNY3v/vlDzrpzHv/4eMthTb8gnUdgAeHu84iEQGPtJe7+HlATVA0iEmFmHHdUd574+mTuvXQcNXXOVQ8WMW322yzcsCPs8iROxetFagdeNLMFZjYz7GJEOgoz48xRvXnx5hP50dSRrCop5/y73+Qbj3zApp17D70D6VTi9SL1ce6+0cx6AH83s4+jRySfEw2QmQD9+vVryxpF2q3kxARmTOrPl8f14b7XPmH2vNW8tHQLN556FFcfP4C0ZF3Iljg9gnD3jdGfJcCTwPiDrDvb3QvdvTAvL6+tShTpEDJTk/iXM4by0i0ncdKQPP7vheVM+cU8Xlqq6xMShwFhZhlmlrXvd+AMQPMGiASo7xHp3DvjWH5/9XiSExO45ndFXPnge2zYVhF2aRKiIIe5PgKcDHQHtgA/BJIB3P1eM+sFFAHZQD1QDoyIrv9kdDdJwB/d/b+a8poa5irScjV19Tz01lru+PsK6h2+M2Uol0/ur2GxHZQm6xORZvt0x17+/ckPeXV5KWP6duN/LzyGIT2zwi5LWllY34MQkXYsv1sXHrjiC/zi4jGs27qHL931Or94aQXVtfVhlyZtRAEhIo0yM84fm89Lt5zEWaN684uXVvKVe95iTdmesEuTNqCAEJFDys1M5a5LxnLfjGPZsL2CL931Oo8VbdBIpw5OASEiTTZlZC/++q0TODq/K995fDHfnLuQXZWaDKGjUkCISLP07tqFP147kW+fMYTnP9zE2Xe+zvvrt4ddlgRAASEizZaYYNx46mAevW4SABffN5/fz1+rU04djAJCRA7bsQU5PPeNEzj+qO58/y9L+PZji3Vzog5EASEiLdI1PZnfXv4FbvriYP78fjFfuectfQO7g1BAiEiLJSQYN31xCL+9vJD12yo491dvMG9FadhlSQspIESk1Zw2vCfP3Hg8PbPSuOKBd3norbVhlyQtoIAQkVbVv3sGT94wmdOG9+SHTy/hR88upa5eF6/bIwWEiLS69JQk7r30WK6Y3J/fvrGG6x9ewN5qXbxubxQQIhKIxATj9vNG8oNzRvDi0i1Mu/9tysqrwi5LmkEBISKBuur4Adx76bEs37yLL//6TVaXloddkjSRAkJEAjdlZC/+NHMSFVV1TJv9NqtKFBLtgQJCRNrE6L7dmDtzIvUOl9z/NqtKdoddkhyCAkJE2szgnlnMnTkRgGmz32HlFoVEPFNAiEibOqpHJnNnTiTBIkcSKxQScUsBISJtblBeJCQSE4xLZr/N8s0KiXikgBCRUAzMy2TuzEkkJRrTf/M267bqLnXxRgEhIqEZ0D2Dh6+ZSG29c9mcd/U9iTijgBCRUB3VI5M5V3yBLbsqufKB9yivqg27JIlSQIhI6Mb1y+HX08exdNMuvv6HBVTX1oddkhBgQJjZHDMrMbOPGmkfZmbzzazKzL59QNuZZrbczFaZ2a1B1Sgi8ePUYT35yQVH8/rKMv718UXUa4K/0AV5BPEgcOZB2rcB3wR+1nChmSUCdwNnASOAS8xsREA1ikgcuaiwL9+ZMpSnFm7kJ39dFnY5nV5gAeHu84iEQGPtJe7+HlBzQNN4YJW7r3b3amAuMDWoOkUkvlx/8iAun1TA/a+v4ffz14ZdTqcWj9cg8oENDZ4XR5eJSCdgZvzg3JGcNqwHtz+zlNdX6s50YYnHgLAYyxo9GWlmM82syMyKSkv1RhLpCBITjDsvGcvgHplc//D7mtwvJPEYEMVA3wbP+wAbG1vZ3We7e6G7F+bl5QVenIi0jczUJH5zeSGpSQlc/dB7bN9THXZJnU48BsR7wGAzG2BmKcA04OmQaxKREPTJSee+GYVs2lHJLA1/bXNBDnN9BJgPDDWzYjO72sxmmdmsaHsvMysGbgFui66T7e61wI3AC8Ay4FF3XxJUnSIS344tyOF/LzyGd9Zs4/tPfYS7hr+2laSgduzulxyifTOR00ex2p4Hng+iLhFpf84fm8+qknJ+9coqhvbK4qrjB4RdUqcQj6eYREQ+55bTh3DGiJ789/PLeHdNoyPopRUpIESkXUhIMH520Wj6HpHODX98n5JdlWGX1OEpIESk3chOS+aeS8dRXlnLjX/8gJo6XbQOkgJCRNqVYb2y+elXjubdtdv4n79+HHY5HZoCQkTanalj8rlicn9+88Yanl3c6NekpIUUECLSLn3v7OGM69eNf318MatKdMvSICggRKRdSklK4NfTjyU9JZFZf3ifypq6sEvqcBQQItJu9eqaxh0Xj2FVSTn/8zddj2htCggRaddOGJzHFZP788CbazXzaytTQIhIu3frWcMYlJfBtx9bxI4KTerXWhQQItLupSUncue0sWwtr+Y2zdfUahQQItIhjMrvys2nD+HZxZt4epGGvrYGBYSIdBjXnTiQYwtyuO2pj9i4Y2/Y5bR7CggR6TCSEhP4+UWjqa93/uXRRdTX61RTSyggRKRDKcjN4PvnjGD+6q08/O76sMtp1xQQItLhXPyFvhx/VHf+568fs2mnTjUdLgWEiHQ4ZsZ/fXkUtfX1fP+pJRrVdJgUECLSIRXkZnDL6UN4adkW/vrR5rDLaZcUECLSYV113ABG5Wfzg78sYWdFTdjltDsKCBHpsJISE/jpBcewvaKa/35+WdjltDsKCBHp0Ebld+WaEwbwp6INvLWqLOxy2hUFhIh0eDedNoSC3HT+7ckPNS14MyggRKTD65KSyE++fDTrtlZw18srwy6n3VBAiEinMPmo7lwwNp/7X1/N6tLysMtpFwILCDObY2YlZvZRI+1mZneZ2SozW2xm4xq0rTWzD81soZkVBVWjiHQut549jLSkRG5/Zqm+G9EEQR5BPAiceZD2s4DB0cdM4J4D2k9x9zHuXhhMeSLS2fTISuPm04cwb0UpLyzZEnY5cS+wgHD3ecC2g6wyFfidR7wNdDOz3kHVIyICcNmkAob1yuJHzy5lb7UuWB9MkwLCzDLMLCH6+xAzO8/Mklv42vnAhgbPi6PLABx40cwWmNnMFr6OiMhnkhIT+I/zRvLpjr38+tVVYZcT15p6BDEPSDOzfOBl4Eoip5BawmIs23dS8Dh3H0fkNNQNZnZiozsxm2lmRWZWVFqq+9GKyKFNGJjL+WOO5L7XVrOmbE/Y5cStpgaEuXsFcAHwS3f/MjCiha9dDPRt8LwPsBHA3ff9LAGeBMY3thN3n+3uhe5emJeX18KSRKSz+N7Zw0lJSuA/ntFkfo1pckCY2SRgOvBcdFlSC1/7aeCy6GimicBOd98UPZ2VFX3RDOAMIOZIKBGRw9UjO42bvjiYV5eX8velumAdS1MD4ibg34An3X2JmQ0EXjnYBmb2CDAfGGpmxWZ2tZnNMrNZ0VWeB1YDq4D7geujy3sCb5jZIuBd4Dl3/1uz/ioRkSa4fHJ/hvTM5D+fXapvWMdgzT20il6sznT3XcGUdPgKCwu9qEhfmxCRpntjZRmX/vYdbj1rGLNOGhR2OW3OzBY09nWCpo5i+qOZZUdP+SwFlpvZd1qzSBGRMBw/uDunDevBr/6xirLyqrDLiStNPcU0InrEcD6RU0P9gBmBVSUi0oa+96XhVNbU8fO/rwi7lLjS1IBIjn7v4XzgL+5ew/4hqSIi7dqgvEwunVjA3HfXs3zz7rDLiRtNDYj7gLVABjDPzAqAuLsGISJyuL512mCy0pL58XOap2mfJgWEu9/l7vnufnZ0aox1wCkB1yYi0mZyMlL45mmDeX1lGa8u15duoekXqbua2c/3fWPZzP4fkaMJEZEOY8bEAgZ0z+DHzy2lpq4+7HJC19RTTHOA3cBF0ccu4IGgihIRCUNKUgL/dtYwPindwyPvrg+7nNA1NSAGufsP3X119PEfwMAgCxMRCcPpI3oyaWAud/x9BTv31oRdTqiaGhB7zez4fU/M7DhgbzAliYiEx8z49y8NZ3tFDffPWx12OaFqakDMAu6O3ultLfAr4LrAqhIRCdGo/K6cc0xv5ry5htLdnffLc00dxbTI3UcDxwDHuPtY4NRAKxMRCdEtpw+hqraeu1/pvPeMaNYd5dx9V4M5mG4JoB4RkbgwMC+Trx7bhz++s57i7RVhlxOKltxyNNYNf0REOoxvnjYYDO56eWXYpYSiJQGhrxqKSId2ZLcuzJhYwOMLillVUh52OW3uoAFhZrvNbFeMx27gyDaqUUQkNNefPIguyYnc0Qkn8jtoQLh7lrtnx3hkuXtL7ygnIhL3cjNTufqEgTz34SY++nRn2OW0qZacYhIR6RSuOWEA3dKT+b8XloddSptSQIiIHEJ2WjJfP2kQr60o5Z3VW8Mup80oIEREmuDyyf3pkZXKHS91nmsRCggRkSZIS05k1kmDeHv1tk5zFKGAEBFpoq9N6EdeVip3dpLvRSggRESaKC05ketOHMhbn2zlvbXbwi4ncAoIEZFmmD6hgO6ZKdz5Usc/iggsIMxsjpmVmNlHjbSbmd1lZqvMbLGZjWvQdqaZLY+23RpUjSIizdUlJZGZJw7kjVVlLFjXsY8igjyCeBA48yDtZwGDo4+ZwD0AZpYI3B1tHwFcYmYjAqxTRKRZLp1YQG5GCr/o4EcRgQWEu88DDhavU4HfecTbQDcz6w2MB1ZF71xXDcyNrisiEhfSU5K49sSBvL6yjPfXbw+7nMCEeQ0iH9jQ4HlxdFljy0VE4saMiQUckdGxr0WEGRCxpgv3gyyPvROzmWZWZGZFpaWlrVaciMjBZKQmcc0JA3htRSkLN+wIu5xAhBkQxUDfBs/7ABsPsjwmd5/t7oXuXpiXlxdIoSIisVw2qT/d0pO5s4N+uzrMgHgauCw6mmkisNPdNwHvAYPNbICZpQDTouuKiMSVzNQkrjpuAK8sL2XZpl2H3qCdCXKY6yPAfGComRWb2dVmNsvMZkVXeR5YDawC7geuB3D3WuBG4AVgGfCouy8Jqk4RkZa4bFIBXZITuX/e6rBLaXWB3dPB3S85RLsDNzTS9jyRABERiWvd0lOYNr4vv5+/jn+ZMpT8bl3CLqnV6JvUIiItdM0JA3Fgzhtrwi6lVSkgRERaKL9bF84bfSSPvLuenRU1YZfTahQQIiKtYOaJA6moruMP76wLu5RWo4AQEWkFw3tnc9KQPB54cw2VNXVhl9MqFBAiIq3kupMGUlZezRPvfxp2Ka1CASEi0komDczlmD5dmT3vE+rqG50Aot1QQIiItBIz47oTB7F2awUvLtkcdjktpoAQEWlFZ47qRb8j0rn3tU+IfN2r/VJAiIi0osQE49oTB7KoeCdvr27fNxRSQIiItLKvHtuH3IwUZs/7JOxSWkQBISLSytKSE7licn9eWV7Kx5vb7yR+CggRkQDMiE7iN7sdT+KngBARCcC+SfyeXriRT3fsDbucw6KAEBEJSHufxE8BISISkPY+iZ8CQkQkQO15Ej8FhIhIgNrzJH4KCBGRgM06aRBl5dX8+f3isEtpFgWEiEjAJg48gtF9unL/vNXtahI/BYSISMDMjOtOikzi90I7msRPASEi0gamjOxFQW46v21HQ14VECIibSAxwbh8Un8WrNvOog07wi6nSRQQIiJt5KuFfchMTeKBN9vHUYQCQkSkjWSlJfPVwj489+EmtuyqDLucQwo0IMzsTDNbbmarzOzWGO05ZvakmS02s3fNbFSDtrVm9qGZLTSzoiDrFBFpK1dM7k9tvfOHt+P/i3OBBYSZJQJ3A2cBI4BLzGzEAat9D1jo7scAlwF3HtB+iruPcffCoOoUEWlLBbkZnDasJw+/sz7uvzgX5BHEeGCVu69292pgLjD1gHVGAC8DuPvHQH8z6xlgTSIiobvquP5s21PN0ws3hl3KQQUZEPnAhgbPi6PLGloEXABgZuOBAqBPtM2BF81sgZnNDLBOEZE2NWlQLsN6ZTHnzTVxfd/qIAPCYiw7sCd+CuSY2ULgG8AHQG207Th3H0fkFNUNZnZizBcxm2lmRWZWVFpa2kqli4gEx8y48rj+fLx5N/NXbw27nEYFGRDFQN8Gz/sA/3Q85e673P1Kdx9D5BpEHrAm2rYx+rMEeJLIKavPcffZ7l7o7oV5eXmt/1eIiARg6ph8ctKTeeDNtWGX0qggA+I9YLCZDTCzFGAa8HTDFcysW7QN4BpgnrvvMrMMM8uKrpMBnAF8FGCtIiJtKi05kekTCnhp2RbWbd0TdjkxBRYQ7l4L3Ai8ACwDHnX3JWY2y8xmRVcbDiwxs4+JnEr6VnR5T+ANM1sEvAs85+5/C6pWEZEwzJhUQKIZD70Vn0Nek4Lcubs/Dzx/wLJ7G/w+HxgcY7vVwOggaxMRCVvP7DS+dExvHi3awC1nDCEzNdCP5GbTN6lFREJ0xeT+lFfV8ucF8XevCAWEiEiIxvbLYXTfbjw0fy31cXavCAWEiEjIrphcwOrSPby+qizsUv6JAkJEJGRnH92b7pmpPBhns7wqIEREQpaalMj0Cf14ZXkpa8riZ8irAkJEJA5Mn9CP5ETjd/PXhl3KZxQQIiJxoEd2Gmcf3ZvHioopr6o99AZtQAEhIhIn9g15feL9+BjyqoAQEYkT+4a8PvhWfAx5VUCIiMSRKyf3j5shrwoIEZE4sm/I60NvrQ27FAWEiEg8SUlKYPqEfvzj45LQh7wqIERE4sz0ifEx5FUBISISZ3pkpfGlOBjyqoAQEYlDl8fBkFcFhIhIHIqHIa8KCBGROBX2kFcFhIhInDr76N7kZYU3y6sCQkQkTqUkJfC18eHN8qqAEBGJY2HO8qqAEBGJYz2ywxvyqoAQEYlzVxw3gPKqWv68oG2HvCogRETi3Ji+3RjdtxsPtfGQ10ADwszONLPlZrbKzG6N0Z5jZk+a2WIze9fMRjV1WxGRzuTKyf1ZXda2Q14DCwgzSwTuBs4CRgCXmNmIA1b7HrDQ3Y8BLgPubMa2IiKdRhizvAZ5BIVG+awAAAiJSURBVDEeWOXuq929GpgLTD1gnRHAywDu/jHQ38x6NnFbEZFOIzLktS+vLC9hw7aKNnnNIAMiH9jQ4HlxdFlDi4ALAMxsPFAA9GnitiIincrXJhSQYMYf3l7XJq8XZEBYjGUHXl35KZBjZguBbwAfALVN3DbyImYzzazIzIpKS0tbUq+ISFzr1TWNM0b05E9FG6isqQv89YIMiGKgb4PnfYCNDVdw913ufqW7jyFyDSIPWNOUbRvsY7a7F7p7YV5eXmvWLyISd2ZMLGBHRQ3PLt4U+GsFGRDvAYPNbICZpQDTgKcbrmBm3aJtANcA89x9V1O2FRHpjCYNyuWoHpn8fv7awF8rsIBw91rgRuAFYBnwqLsvMbNZZjYrutpwYImZfUxkxNK3DrZtULWKiLQXZsaMiQUsKt7Jog07gn0t93DmGQ9CYWGhFxUVhV2GiEigdlfWMPG/X+bMUb35fxeNbtG+zGyBuxfGatM3qUVE2pmstGS+PC6fZxZvZNue6sBeRwEhItIOXTapP9W19TxWtOHQKx8mBYSISDs0pGcWEwYcwR/eWUddQPMzKSBERNqpGZMK2LBtL6+tKAlk/woIEZF2asrIXvTISuV384P5ZrUCQkSknUpOTOCS8f3YubeGqtrW/2Z1UqvvUURE2sw3Tj2Km08fEsi+dQQhItKOJSUG9zGugBARkZgUECIiEpMCQkREYlJAiIhITAoIERGJSQEhIiIxKSBERCSmDnU/CDPbCaxssKgrsLOJz7sDZa1YzoGv1dL1G2tv6vKDPT+wLcy+aMq6zemLpixrrC/a63uisTb1RePLOvNnxWB37xpzT+7eYR7A7MN9DhQFWUtL12+svanLD/G3H9gWWl80Zd3m9EVTljXWF+31PaG+aNnf3YR+aZd90dzl7t7hTjE908LnQdbS0vUba2/q8oM9D7Ifmrv/pqzbnL5oyrK26ou2ek801qa+aHyZPiti6FCnmFrCzIq8kdvudTbqiwj1w37qi/06U190tCOIlpgddgFxRH0RoX7YT32xX6fpCx1BiIhITDqCEBGRmBQQIiISkwJCRERiUkA0gZmdYGb3mtlvzOytsOsJi5klmNl/mdkvzezysOsJk5mdbGavR98XJ4ddT9jMLMPMFpjZOWHXEhYzGx59PzxuZl8Pu57W0OEDwszmmFmJmX10wPIzzWy5ma0ys1sPtg93f93dZwHPAg8FWW9QWqMfgKlAPlADFAdVa9BaqS8cKAfSUF8AfBd4NJgqg9dKnxPLop8TFwEdYhhshx/FZGYnEvmH/Dt3HxVdlgisAE4n8o/7PeASIBH4yQG7uMrdS6LbPQpc4+672qj8VtMa/RB9bHf3+8zscXe/sK3qb02t1Bdl7l5vZj2Bn7v79LaqvzW1Ul8cQ2T6iTQi/fJs21Tfelrrc8LMzgNuBX7l7n9sq/qDkhR2AUFz93lm1v+AxeOBVe6+GsDM5gJT3f0nQMxDZDPrB+xsj+EArdMPZlYMVEef1gVXbbBa6z0RtR1IDaLOttBK74tTgAxgBLDXzJ539/pAC29lrfWecPengafN7DlAAdFO5QMbGjwvBiYcYpurgQcCqygcze2HJ4BfmtkJwLwgCwtBs/rCzC4ApgDdgF8FW1qba1ZfuPu/A5jZFUSPrAKtru009z1xMnABkf8wPB9oZW2kswaExVh20HNt7v7DgGoJU7P6wd0riARlR9TcvniCSGB2RM3+9wHg7g+2fimhau574lXg1aCKCUOHv0jdiGKgb4PnfYCNIdUSJvXDfuqL/dQXEZ2+HzprQLwHDDazAWaWAkwDng65pjCoH/ZTX+ynvojo9P3Q4QPCzB4B5gNDzazYzK5291rgRuAFYBnwqLsvCbPOoKkf9lNf7Ke+iFA/xNbhh7mKiMjh6fBHECIicngUECIiEpMCQkREYlJAiIhITAoIERGJSQEhIiIxKSCkQzOz8jZ+vVa5X0j0fhM7zewDM/vYzH7WhG3ON7MRrfH6IqCAEGkWMzvo/GXuPrkVX+51dx8LjAXOMbPjDrH++URmVBVpFZ11sj7pxMxsEHA3kAdUANe6+8dmdi5wG5ACbAWmu/sWM7sdOBLoD5SZ2QqgHzAw+vMX7n5XdN/l7p4ZndnzdqAMGAUsAC51dzezs4GfR9veBwa6e6NTirv7XjNbSGR2UczsWmBmtM5VwAxgDHAecJKZ3QZ8Jbr55/7OFnSddDI6gpDOaDbwDXc/Fvg28Ovo8jeAidH/tc8F/rXBNscSuRfA16LPhxGZ7ns88EMzS47xOmOBm4j8r34gcJyZpQH3AWe5+/FEPrwPysxygMHsn2L9CXf/gruPJjIFxNXu/haReYK+4+5j3P2Tg/ydIk2iIwjpVMwsE5gMPGb22WzO+2740wf4k5n1JvK/8zUNNn3a3fc2eP6cu1cBVWZWAvTk87cefdfdi6Ovu5DIEUg5sNrd9+37ESJHA7GcYGaLgaHAT919c3T5KDP7MZF7UWQSmSuoOX+nSJMoIKSzSQB2uPuYGG2/JHL70KcbnCLaZ88B61Y1+L2O2P+WYq0T6x4DjXnd3c8xsyHAG2b2pLsvBB4Eznf3RdGb9JwcY9uD/Z0iTaJTTNKpRG8Zu8bMvgpgEaOjzV2BT6O/Xx5QCR8DAxvc3vLiQ23g7iuI3AP5u9FFWcCm6GmthvfC3h1tO9TfKdIkCgjp6NKj0zfve9xC5EP1ajNbBCwBpkbXvZ3IKZnXiVxAbnXR01TXA38zszeALcDOJmx6L3CimQ0Avg+8A/ydSODsMxf4TnRo7CAa/ztFmkTTfYu0MTPLdPdyi1wcuBtY6e53hF2XyIF0BCHS9q6NXrReQuS01n0h1yMSk44gREQkJh1BiIhITAoIERGJSQEhIiIxKSBERCQmBYSIiMSkgBARkZj+P6IV9IRA7brAAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ddpm_learner.lr_find()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now let's train with one-cycle LR schedule:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 538 }, "id": "gXKdZ3mRR_4G", "outputId": "8b128c9b-a2d8-490e-ce11-1ba064f66877" }, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_losstime
00.3271540.18392700:26
10.0727950.05529500:27
20.0506360.04097100:27
30.0440120.04717100:26
40.0418880.03745300:26
50.0400370.04343200:27
60.0387950.04131100:26
70.0384510.03850900:26
80.0378110.04465100:27
90.0383540.04653200:26
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ddpm_learner.fit_one_cycle(10,3e-4)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZRc5X3m8e/v1tZLdUutXqRWtzbQhoBGiEbIMcYidmLAcSAJEwtDnBAcRTY4OBnnwMRJbI9nMnaceDI+NjCQcLwRKwRwwI4wthMw9oCwWyC07wiptbZaSOqt9nf+qJJoNd1StVSt6rr1fM6pU7fufav6d+8pPfXqLu815xwiIlL6vGIXICIihaFAFxHxCQW6iIhPKNBFRHxCgS4i4hPBYv3hhoYGN3PmzGL9eRGRkrRmzZojzrnG4ZYVLdBnzpxJR0dHsf68iEhJMrM3R1p21l0uZvaomR02sw0jLL/dzNblHi+Z2RXnU6yIiJybfPahfwO44QzL3wDe65xrA74APFyAukREZJTOusvFOfeimc08w/KXBr1cDbSef1kiIjJahd6Hfhfw7EgLzWw5sBxg+vTpBf7TIuJ3yWSSzs5OYrFYsUsZcxUVFbS2thIKhfJ+T8EC3cyuJxvo147Uxjn3MLldMu3t7RpERkRGpbOzk5qaGmbOnImZFbucMeOco7u7m87OTmbNmpX3+wpyHrqZtQH/CNzsnOsuxGeKiAwVi8Wor6/3dZgDmBn19fWj/p/IeQe6mU0HngJ+zzm37Xw/T0TkTPwe5iedy3rmc9rid4GXgXlm1mlmd5nZCjNbkWvy10A98ICZrTWzMT25fOvBHv5m1Wb6E6mx/DMiIiXnrIHunLvNOdfsnAs551qdc//knHvIOfdQbvnHnHN1zrmFuUf7WBbc+VY/D7+4iw37TozlnxEReYdjx47xwAMPjPp9N910E8eOHRuDik5XcmO5tLVOBGBd59hvHBGRwUYK9HQ6fcb3rVq1iokTJ45VWacU7dL/c9VYE6FlYiVr9yrQReTCuv/++9m5cycLFy4kFAoRjUZpbm5m7dq1bNq0iVtuuYW9e/cSi8W49957Wb58OfD2UCe9vb3ceOONXHvttbz00ku0tLTw9NNPU1lZWZD6Si7QAa6YNoHX9ijQRcrZ57+/kU37C7vrdcHUWj77oUtHXP7FL36RDRs2sHbtWl544QU++MEPsmHDhlOnFj766KNMmjSJgYEBrr76an7nd36H+vr60z5j+/btfPe73+WRRx7hd3/3d3nyySe54447ClJ/ye1yAbh65iT2HRug863+YpciImVs8eLFp50n/tWvfpUrrriCJUuWsHfvXrZv3/6O98yaNYuFCxcCcNVVV7F79+6C1VOSPfRrZmV/8X7xxlFa66qKXI2IFMOZetIXSnV19anpF154gZ/85Ce8/PLLVFVVsXTp0mHPI49EIqemA4EAAwMDBaunJHvo86bUUFsR5JVdR4tdioiUkZqaGnp6eoZddvz4cerq6qiqqmLLli2sXr36AldXoj30gGcsnjWJX+xWoIvIhVNfX8+73/1uLrvsMiorK5k8efKpZTfccAMPPfQQbW1tzJs3jyVLllzw+koy0AEWz5rETzYf5vCJGE21FcUuR0TKxD//8z8POz8SifDss8OPTXhyP3lDQwMbNrx9a4lPf/rTBa2tJHe5wNv70V95Q710EREo4UC/dGot0UiQl3ZqLDARESjhQA8GPN51cT0/296FcxqJV0SkZAMd4Lo5DXS+NcDubp2PLiJS2oE+txGAF7d1FbkSEZHiK+lAn1FfzfRJVfxsuwJdRKSkAx3gurkNvLyzm0QqU+xSREROE41GAdi/fz+33nrrsG2WLl1KR0dhbiNR8oH+njmN9CXSvLrnrWKXIiIyrKlTp/LEE0+M+d8p+UB/18X1BDzTbhcRGXP33XffaeOhf+5zn+Pzn/8873vf+1i0aBGXX345Tz/99Dvet3v3bi677DIABgYGWLZsGW1tbXz4wx8u6FguJXul6Em1FSEWTZ/Ii9uO8OcfKHY1InLBPHs/HFxf2M+ccjnc+MURFy9btoxPfepTfOITnwDg8ccf54c//CF/+qd/Sm1tLUeOHGHJkiX85m/+5oj3BH3wwQepqqpi3bp1rFu3jkWLFhWs/JLvoUN2t8uG/cfp7o0XuxQR8bErr7ySw4cPs3//fl5//XXq6upobm7mL/7iL2hra+P9738/+/bt49ChQyN+xosvvnhq/PO2tjba2toKVl/J99Ahe/riV368jZ/vOMLNC1uKXY6IXAhn6EmPpVtvvZUnnniCgwcPsmzZMh577DG6urpYs2YNoVCImTNnDjts7mAj9d7Ply966Je3TGBCZYifbT9S7FJExOeWLVvGypUreeKJJ7j11ls5fvw4TU1NhEIhnn/+ed58880zvv+6667jscceA2DDhg2sW7euYLX5ooce8IxrZzecGgZgrH79REQuvfRSenp6aGlpobm5mdtvv50PfehDtLe3s3DhQubPn3/G93/84x/nzjvvpK2tjYULF7J48eKC1eaLQIfs+ej/vv4A2w71Mm9KTbHLEREfW7/+7YOxDQ0NvPzyy8O26+3tBbI3iT45bG5lZSUrV64ck7p8scsFsgdGAZ2+KCJlyzeBPnViJbObovxU47qISJnyTaADvGdOA7944yixZLrYpYjIGCmX4bLPZT3PGuhm9qiZHTazDSMsNzP7qpntMLN1Zla4s+RH6bq5jcRTGX6huxiJ+FJFRQXd3d2+D3XnHN3d3VRUjO72mvkcFP0G8DXgWyMsvxGYk3tcAzyYe77grpk1iXDA42fbu04NrSsi/tHa2kpnZyddXf7ftVpRUUFra+uo3nPWQHfOvWhmM8/Q5GbgWy77k7nazCaaWbNz7sCoKimAqnCQ9pl1Oh9dxKdCoRCzZs0qdhnjViH2obcAewe97szNewczW25mHWbWMVa/sNfNbWTLwR4OnTjzlVoiIn5TiEAf7iqeYXdwOeceds61O+faGxvHZpfIe+Y0AKiXLiJlpxCB3glMG/S6FdhfgM89J5dMqaUhGtH56CJSdgoR6M8AH82d7bIEOF6M/ecneZ6x5KJJvLLrqO+PhIuIDJbPaYvfBV4G5plZp5ndZWYrzGxFrskqYBewA3gE+MSYVZunay6q5+CJGHuPFm7geBGR8S6fs1xuO8tyB9xdsIoK4JpZkwB45Y1uptdXFbkaEZELw1dXip40uzFKXVWIV3SBkYiUEV8GuucZV8+cpCtGRaSs+DLQIbsffc/Rfg4c1350ESkP/g303H509dJFpFz4NtDnT6mhKhzgtT3Hil2KiMgF4dtADwY82lon8Oqet4pdiojIBeHbQAdYNL2OTftPaHx0ESkLvg70K6fXkco41u87XuxSRETGnM8DfSIAr76p3S4i4n++DvSGaIQZ9VXajy4iZcHXgQ5w5bSJvLrnmAbqEhHf832gL5pRR1dPnM63dIGRiPib7wN94bTsfnQdGBURv/N9oM+bUkMoYKzrVKCLiL/5PtAjwQBzJ9ewQT10EfE53wc6wOUtE1i/77gOjIqIr5VFoF/WMoHjA0kdGBURXyuLQL+8ZQKgA6Mi4m9lEejzm3VgVET8rywCXQdGRaQclEWggw6Mioj/lU2g68CoiPhd2QT6pVNrAdh04ESRKxERGRtlE+hzJ9dgBlsO9BS7FBGRMVE2gV4dCTJjUhVbDqqHLiL+lFegm9kNZrbVzHaY2f3DLJ9gZt83s9fNbKOZ3Vn4Us/fJc21bDmoHrqI+NNZA93MAsDXgRuBBcBtZrZgSLO7gU3OuSuApcDfm1m4wLWet/lTatnd3Ud/IlXsUkRECi6fHvpiYIdzbpdzLgGsBG4e0sYBNWZmQBQ4Coy71JzfXINzsFW9dBHxoXwCvQXYO+h1Z27eYF8DLgH2A+uBe51zmYJUWEALmrNnumi3i4j4UT6BbsPMG3p1zgeAtcBUYCHwNTOrfccHmS03sw4z6+jq6hp1seerZWIl0UiQLTp1UUR8KJ9A7wSmDXrdSrYnPtidwFMuawfwBjB/6Ac55x52zrU759obGxvPteZz5nnGvCk1bFYPXUR8KJ9A/yUwx8xm5Q50LgOeGdJmD/A+ADObDMwDdhWy0EKZP6WGzQdOaAgAEfGdswa6cy4F3AM8B2wGHnfObTSzFWa2ItfsC8CvmNl64D+A+5xzR8aq6PNxSXMtPbEU+4/Hil2KiEhBBfNp5JxbBawaMu+hQdP7gV8vbGlj45LmGgC2HDhBy8TKIlcjIlI4ZXOl6EnzpmSP1W7WgVER8ZmyC/RoJEjLxEq2H+4tdikiIgVVdoEOMGdylO2HFOgi4i9lGeizG6Ps7OolndGZLiLiH2UZ6HMmR4mnMuzTzS5ExEfKMtBnN2XPdNl+WBcYiYh/lGmgRwHYoQOjIuIjZRnoEypDNNVEdKaLiPhKWQY6ZHvpCnQR8ZOyDfQ5TVF2Hu7VmC4i4htlG+izJ9fQG09x8ITGdBERfyjfQG/MHhjVBUYi4hdlG+hzJutMFxHxl7IN9PrqMHVVIR0YFRHfKNtANzNm5w6Mioj4QdkGOmSvGN12uEdnuoiIL5R5oEc51p+kuy9R7FJERM5bWQf6HA0BICI+Ut6BnjvTRQdGRcQPyjrQp9RWEI0E2XFIoy6KSOkr60A3My5uirKjSz10ESl9ZR3okN2PrqtFRcQPyj7QZzdFOdwT5/hAstiliIicl7IPdJ3pIiJ+UfaBfvLuRdt1YFRESlzZB3prXRWRoKceuoiUvLwC3cxuMLOtZrbDzO4foc1SM1trZhvN7KeFLXPsBDzjokad6SIipS94tgZmFgC+Dvwa0An80syecc5tGtRmIvAAcINzbo+ZNY1VwWNhdlOU1/a8VewyRETOSz499MXADufcLudcAlgJ3DykzUeAp5xzewCcc4cLW+bYmtMUZd+xAfoTqWKXIiJyzvIJ9BZg76DXnbl5g80F6szsBTNbY2YfLVSBF8LspijOwa6uvmKXIiJyzvIJdBtm3tDxZoPAVcAHgQ8Af2Vmc9/xQWbLzazDzDq6urpGXexYma1TF0XEB/IJ9E5g2qDXrcD+Ydr80DnX55w7ArwIXDH0g5xzDzvn2p1z7Y2Njedac8HNrK8m4JkCXURKWj6B/ktgjpnNMrMwsAx4Zkibp4H3mFnQzKqAa4DNhS117ISDHjPqq9h+WOeii0jpOutZLs65lJndAzwHBIBHnXMbzWxFbvlDzrnNZvZDYB2QAf7RObdhLAsvtNmNUfXQRaSknTXQAZxzq4BVQ+Y9NOT1l4EvF660C2t2U5T/3HKYZDpDKFD211uJSAlScuXMmRwllXG82a0zXUSkNCnQc2Y31gBoKF0RKVkK9JyLm6oBnbooIqVLgZ5TFQ7SMrFSY7qISMlSoA8yW3cvEpESpkAfZHZTlF1Heslkhl4IKyIy/inQB5ndFCWWzLDv2ECxSxERGTUF+iAa00VESpkCfZDZjbnb0WkIABEpQQr0QeqqwzREw+qhi0hJUqAPcbHGdBGREqVAH2LO5CjbD/finM50EZHSokAfYk5TDT2xFIdOxItdiojIqCjQh5g3JTumy5aDJ4pciYjI6CjQh5ifC/StB3Wmi4iUFgX6EBOrwkyujbD1kAJdREqLAn0Y86bUqocuIiVHgT6M+VNq2H64l1Q6U+xSRETypkAfxtzJNSRSGXZ39xe7FBGRvCnQh3HywOg27UcXkRKiQB/G7KYonsEW7UcXkRKiQB9GRSjAzIZqtupcdBEpIQr0EcyfUsM23b1IREqIAn0EcyfXsLu7j4FEutiliIjkRYE+gkuaa3EOXWAkIiVDgT6CBc21AGzar/3oIlIa8gp0M7vBzLaa2Q4zu/8M7a42s7SZ3Vq4Eoujta6Smoogmw4cL3YpIiJ5OWugm1kA+DpwI7AAuM3MFozQ7kvAc4UushjMjAXNtWxUD11ESkQ+PfTFwA7n3C7nXAJYCdw8TLtPAk8ChwtYX1EtmFrLlgM9pDO62YWIjH/5BHoLsHfQ687cvFPMrAX4LeChwpVWfAuaaxlIptnd3VfsUkREziqfQLdh5g3tsv4DcJ9z7ozn+JnZcjPrMLOOrq6ufGssmgVTdWBUREpHPoHeCUwb9LoV2D+kTTuw0sx2A7cCD5jZLUM/yDn3sHOu3TnX3tjYeI4lXzhzmmoIBYwN+3RgVETGv2AebX4JzDGzWcA+YBnwkcENnHOzTk6b2TeAHzjn/q2AdRZFOOhx6dQJvLbnWLFLERE5q7P20J1zKeAesmevbAYed85tNLMVZrZirAsstqtm1PF65zESKY2NLiLjWz49dJxzq4BVQ+YNewDUOfcH51/W+HHVjDr+6edvsOnACRZOm1jsckRERqQrRc/iqhl1ALz65ltFrkRE5MwU6GcxubaClomVrNmjQBeR8U2BnodFM+rUQxeRcU+Bnoerpk/kwPEY+48NFLsUEZERKdDzcNWMSQCsUS9dRMYxBXoe5jfXUBkK8Kr2o4vIOKZAz0Mo4HHFtAnajy4i45oCPU+Lptexcf8J3ZJORMYtBXqerppRRyrjWNepYQBEZHxSoOfpyunZC4x0PrqIjFcK9DxNqg5zUWO19qOLyLilQB+Fa2ZN4pVdR0mmNVCXiIw/CvRReO/cRnriKfXSRWRcUqCPwrtnNxD0jOe3jv+7LYlI+VGgj0JNRYj2mXW8sNU398EWER9RoI/S0nlNbDnYw8HjsWKXIiJyGgX6KL1vfhMAP950sMiViIicToE+SnMm1zC7Kcqq9Qp0ERlfFOjn4KbLpvDKG90c6Y0XuxQRkVMU6OfgprZmMg6e26heuoiMHwr0czBvcg0XNVSzav2BYpciInKKAv0cmBk3Xd7M6l1H6dZuFxEZJxTo5+jGy6eQzjh+tOlQsUsREQEU6OdsQXMtM+ur+P7r+4tdiogIoEA/Z2bGby9q5aWd3ezp7i92OSIiCvTz8V/aW/EM/qVjT7FLERHJL9DN7AYz22pmO8zs/mGW325m63KPl8zsisKXOv40T6jk+nlNPN7RSSKlIXVFpLjOGuhmFgC+DtwILABuM7MFQ5q9AbzXOdcGfAF4uNCFjld3LJlBV0+cH2koABEpsnx66IuBHc65Xc65BLASuHlwA+fcS865k4OErwZaC1vm+HXd3EZa6yr5zuo3i12KiJS5fAK9Bdg76HVnbt5I7gKeHW6BmS03sw4z6+jq8seY4gHPuP2aGazedVQ3kBaRoson0G2YeW7YhmbXkw30+4Zb7px72DnX7pxrb2xszL/Kce6OJdOZWBXi7360rdiliEgZyyfQO4Fpg163Au84+drM2oB/BG52znUXprxxpGsb/PRvIZN+x6KaihCfWHoxL27rYvUu/626iJSGfAL9l8AcM5tlZmFgGfDM4AZmNh14Cvg955w/u6kbvwfP/0/45ofgxDsvJvrou2YyuTbC3z23FeeG/Q+MiMiYOmugO+dSwD3Ac8Bm4HHn3EYzW2FmK3LN/hqoBx4ws7Vm1jFmFRfL0vvglodg/1p48N2w7bnTFleEAnzyV+fQ8eZbPK9b1IlIEVixepPt7e2uo6MEc//IdvjXO+HQelhyN7z/cxAMA5BMZ/i1r/yUcNBj1Z+8h2BA122JSGGZ2RrnXPtwy5Q4o9UwBz72E1i8HFZ/HR79dTi6C4BQwOO+G+az7VAvT6zpLHKhIlJuFOjnIlQBN30ZPvydbJg/dB1seBKAGy6bQvuMOr783FaO9SeKXKiIlBMF+vm45EOw4ucweQE88YfwzCex5ABfuOUyjg0k+e/f31TsCkWkjCjQz9fE6fAH/w7X/hm8+m145Hou8Tq5+/rZPPXaPv7ttX3FrlBEyoQCvRACIXj/Z+H3noL+o/DI9dw78f9x9YyJfOZ769nV1VvsCkWkDCjQC+niX83ugpn+LgL//im+NeH/MikwwMe+2aH96SIy5hTohVYzGe54Ct73WSq3/4AfR/+aumMb+ONvryGeeudVpiIihaJAHwueB+/5M7jzWSo8x7+GPsvle77NPd9Zo3HTRWTMKNDH0vRrYMXP8ObdwF+GHuO2nX/OZx57XqEuImNCgT7WKuuy56vf9HdcF9rEf911F3/5Dw9yuCdW7MpExGcU6BeCGSz+I4J/9B/U1E7kf/V8hh/8nz+hY5c/xoQXkfFBgX4hNbdRfc/POTbnt/nD1L+Q/sZv8NV/+6kOlopIQSjQL7RIlPo7HiX+Gw+wMPgmd7z2Eb7wlf/Nq3veOvt7RUTOQIFeJJH224l84ueE6qbxP/q/wKsPf5xPfmc1O3URkoicIwV6MTXMpubuF0hc9TE+FnyW5ds/zh9+5XH++NsdrHnzaLGrE5ESo/HQx4vNPyDz9N0kk0n+Kv1HPB5bzMWN1Vw/r4nfWtTCpVMnFLtCERkHzjQeugJ9PDm2F568C/a+wvaW3+ZLdicvvtFHIp1hdlOUJRdN4uqZk7h06gRmNVQT8Ia7f7eI+JkCvZSkU/DC38DPvgKN8+j5jUd4srOG57d20bH7KH2J7BkxdVUhrp45iQ+2NdM+cxLNtRV4CngR31Ogl6Kdz8NTyyF+Am78Eiz6fVIZx9ZDPWzaf4KXd3Wzemc3+49nL1CqDAWYOznK3Mk1zJtSw9zJNcxqqCYS8ohGglSGApgp8EVKnQK9VPUehu/9Mez8TwhWQnUDVNXnnhtwVfXsS1azN17F7oFKtpwI8/rREDv7KuihEng7wM2gOhykOhKgOhI8NR2NBKmpCDFlQgXT6qqYMiFCRTBAOOgRDHhUh7PToUD2EfCM2oqg7pcqUiRnCvTghS5GRiHaBLc/CetWwqGN0N8NfUeg/wh0bcP6j9Ca7KcVeNfg91VAxgsRC9URC9fRH5xIT2ACJ7wJHGMCR6nhiKvhcKyGg71RtsSr+EFPkGQmvx58KGBMqAxRHQlSFQ5SEwlSGQ5QEfKIBANUBI3qoKPaS1IdSBL1klR5SaJeiiovQQUJKixJpSUJZmJEXIJoIEXYxfHSA1gqhqXiEIzgRWqgohYXqcWrqIFIbe5Rc+qRDkWJZyDjIBzwCAVM/xuR0zkH6QQkByAVyz6nE5BJg0u//ezcMPMykMkMM2/I8+DlmdxnjfSeaYvhoqUFX00F+njnebDwIyMvT/RnA77vyGmB7/Udoar/CFV93UzqPwJ926GnO7sLZxguEiBTWUciPIlEpI5EZBLxcB0DVgWpGF46BqkYgVSMVCIbul5qgEBfnOCJGCGXIOTihF2CCAkCnNsAZCnnMUCEOCHCJIkSwzPHmeI5AGRcBb1U0usq6aGKPirptyoGvCr6rZqYV008UEU8UE0iECURjJLIve63anqopJ8KaiorCAeNgOcR8gwySUKZBJVekgpLUkGCiIsTdAmCmTiBTJxQJk4q3k/IJaj2Uqd+qAKZ7DapIEHYJXCp7I9XhASVliCU+wwvHcdLx/DScXAOZx4ZC2af8XAWwFn22by3p50FyOCBl53veUHwPNJkXwcCAdIWwBHIfo9y7zcvALmHecHcI4AXDIIXIuk8EhmPeMaIp41YxiOeNpLOIxQKEw6HCIUj4AVwFoTc+50XxALZ12/PC0Eg+zecBelNOgLBEJFwmFAoTCgUImwpArltEEjHsj/o6Xj2O5aO4aXiWGoAO7ksFSOd6M99B7OvyT0HBrU5FdwnnynO3ojhpH/lXgIXLS345yrQS124CsLTs7fCy0cqfnpPv68b+o9gfUcI9B+hsu8Ilf3d0LcDuo5AvBdClRCsyN4cO1gJlbnnUO2gZUOfs21csIJUIELCIsSIkCDEAGFiLky/C5H2KuhNB+mKe/SmgqQtSMZBxjkyGUcmkyGY6iOc7sNL9GSnU72EUr1UpPuoYoBq10dFpp9Iuo9Aspe6VA9NqT5CqcOE031UpHupSPVD6uybp59KEhYi7BKESRLk3IdlSBAk7kLECBMjTIIwMUIcc2FiLkSMCHGixAgTd2HihHAYHhkCZAiQJoAjYJlB896e9sgQJJ2bThAgjmentwuSHv695k7NC+Q+g1z7KtJMtPE7HEXchUiS264ufGr7ZrdjiBgVJGxC9rvnRehJBel3IQZcmKQXpicVJEaYlIVJZoykMzJ4pPEIBAI4PCLhEM48Ui47P5XJdjZS5OY5SGaMNB6xNKTxcHikc+2zn2e5LZ6dl22Tfc/na9q4Ywy2jQK93AQjUDs1+7gADAjlHtUX5C+OIJOBRC/Ee7L/SzntuQdi2emqeA9VqYHsD1YwMuSHKpL7IasY9Fxx+g/ZqR+zCsJegDBQnXE4OHWaaTyVpqsnTk8sRV88hecZnhlBzwgFPIKB7PTJYxgZB+mMI+McA4k0aZf9H4uZYUAq44gl08SSaVIZhxf0iCUzDCRT2eMeZqSdO/UZqXT2OZ2BVCZDxjmSaUcynf1fVWUoe2wlGvaoCUM0ZERDEPYy9Mfj9PfH6IvFsEwaXArSacikcJkUDHq4TApLvz3tuTSVQcikkqRSSdKpJJl0koTzSFmEVCAbwNnpSHbai5C03HPutcOIhAIAuNx6Gdn+dyyZIZHK0JdIcaw/QTyVoToSJBL0CHpGMu2oCQeIkt0jEvDIbnPPSKQd8WSadMbRG8/++psZnoFnRsAzLDd9ch4GtRUhIrnjTJOqw0QjQRwOw6gMB8hkHLFUmqN9SWLJNPFUhqtmThqTr7kCXcqD50FFbfZBywX+06fvMIoEA7TWVV3QGgpFl7eNbzpVQUTEJ/IKdDO7wcy2mtkOM7t/mOVmZl/NLV9nZosKX6qIiJzJWQPdzALA14EbgQXAbWa2YEizG4E5ucdy4MEC1ykiImeRTw99MbDDObfLOZcAVgI3D2lzM/Atl7UamGhmzQWuVUREziCfQG8B9g563ck7jyrl0wYzW25mHWbW0dWl26+JiBRSPoE+3DUdQ8/Qz6cNzrmHnXPtzrn2xsbGfOoTEZE85RPoncC0Qa9bgf3n0EZERMZQPoH+S2COmc0yszCwDHhmSJtngI/mznZZAhx3zh0ocK0iInIGZ72wyDmXMrN7gOfIDpvxqHNuo5mtyC1/CFgF3ATsAPqBO5961L8AAANiSURBVM/2uWvWrDliZm+eY90NwJFzfK9faBtkaTtoG5xULtthxkgLijZ87vkws46Rho8sF9oGWdoO2gYnaTvoSlEREd9QoIuI+ESpBvrDxS5gHNA2yNJ20DY4qey3Q0nuQxcRkXcq1R66iIgMoUAXEfGJkgr0sw3j6ydmttvM1pvZWjPryM2bZGY/NrPtuee6Qe3/W267bDWzDxSv8vNjZo+a2WEz2zBo3qjX28yuym2/HbmhnUvqrtEjbIfPmdm+3HdirZndNGiZ77aDmU0zs+fNbLOZbTSze3Pzy+77kDfnXEk8yF7UtBO4CAgDrwMLil3XGK7vbqBhyLy/Be7PTd8PfCk3vSC3PSLArNx2ChR7Hc5xva8DFgEbzme9gV8A7yI7ztCzwI3FXrcCbIfPAZ8epq0vtwPQDCzKTdcA23LrWnbfh3wfpdRDz2cYX7+7GfhmbvqbwC2D5q90zsWdc2+QvWJ3cRHqO2/OuReBo0Nmj2q9c0M31zrnXnbZf83fGvSekjDCdhiJL7eDc+6Ac+7V3HQPsJnsKK5l933IVykFel5D9PqIA35kZmvMbHlu3mSXGyMn99yUm+/3bTPa9W7JTQ+d7wf35O4K9uigXQ2+3w5mNhO4EngFfR9GVEqBntcQvT7ybufcIrJ3g7rbzK47Q9ty2zYnjbTeft0eDwIXAwuBA8Df5+b7ejuYWRR4EviUc+7EmZoOM8832yEfpRToZTVEr3Nuf+75MPA9srtQDp28E1Tu+XCuud+3zWjXuzM3PXR+SXPOHXLOpZ1zGeAR3t6t5tvtYGYhsmH+mHPuqdxsfR9GUEqBns8wvr5gZtVmVnNyGvh1YAPZ9f39XLPfB57OTT8DLDOziJnNIntv119c2KrH1KjWO/ff8B4zW5I7m+Gjg95Tsobc1vG3yH4nwKfbIVfzPwGbnXNfGbRI34eRFPuo7GgeZIfo3Ub26PVnil3PGK7nRWSP1r8ObDy5rkA98B/A9tzzpEHv+Uxuu2ylhI/gA98luzshSbZndde5rDfQTjbwdgJfI3dVdKk8RtgO3wbWA+vIhlezn7cDcC3ZXSPrgLW5x03l+H3I96FL/0VEfKKUdrmIiMgZKNBFRHxCgS4i4hMKdBERn1Cgi4j4hAJdRMQnFOgiIj7x/wHYKZ+/gc8IagAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ddpm_learner.recorder.plot_loss()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Path('/home/tmabraham/.fastai/data/cifar10/models/cifar10-test.pth')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ddpm_learner.save('cifar10-test')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "ddpm_learner = ddpm_learner.load('cifar10-test')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sample generation\n", "\n", "Since we implemented sampling in the Callback, we simply can call fastai's built-in `get_preds` function to get our predictions and decode them into an image (rescale from [-1, 1] to [0,255])." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "preds, targ = ddpm_learner.get_preds()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAYAAAA4E5OyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAZ0UlEQVR4nO2cyXIkWXOdP/c7REQOAGrogX/TJJJvxK0eQy+qjSQTFxJNFPWz+68qFIDMjOEO7loEmjS1kUUjNtKirxnMYAkgM+KEXx/OORfi7vy+/mnp/+sL+P9t/Q7Ib9bvgPxm/Q7Ib9bvgPxmxW/98K//w3/0PgjtndJ0wiST5AZeqeXK6f6Bh4/f8/T4yHK9cfvTPzBE5fsPd9AbWCcQcIxar+Ad9467YA6rd9wc6VDqRumFnBURWFujNGctYAEIAILGTD59YF1vLPOF5/lCtc4pHxFX6PD181duLxe4NjBHVKB1vDRAERHs05/k3wxInEYkCyTFPGIIaAA3XBOtw7JsbOtGLRshRWKOSM5YMXqv1NYwa6zLDbcGvSIhggY2EdwdulHqRq0bkF4B6bTutAbOfu0hZUQUN8O7YWb73zuIOFinV0NxYgjIIGAO5pg5pkoM+3u8KULG799hQahR9gvoHdeMe8BR5uqsn5+5vXyl15X784FhHAinM/Xa2crCPD9R15Xnr49Y2bCyMJ5OxGGkDgdcHO+Vutyo68I0HUADL6WDQ3DwpJACx/GAhoDVRquNslXMDMFQtf31eSG5oTkjOYI5fVlpInSUKZ+JIb0RkMOB2hvbutDWmVo3QuogTm2NXgt1K7Qy49a44bTaEA3cXm7MlwuXr0+UbWW5LXhveO8cYyN5oXUhROUwREwDzRW6gUMWQ2MkpAwxQgyEEBENaFBizgz9SN0a3RtBHFWHAD0JpoqgYI57pOJsvXOYIjnltwGSh4ytjm0VWxZsu6EjuILVTlkXltsNpwOOeKd3Q2Picpm5vsw8PV2oZaPWCm77V+0M2uleyETScaBrIIgiDuJGEidEIY4DxAwh4Bp2QKISeyJlJ/QZ74ZaBzdEnaCCIQgCKogHpHesCGNWhhzeBsjz8y+UWpi3K2NSzsOJw7sRE+Px5StLTmjMlGWltc7WCl0aYVFuy8x1WSFmVBQnYG4gTjjfMxwnhkEZc+LD+cA2ZtZpYJxGEOH55YVOoPfAMB2Jw8g8F9yV4XCm9RnZOttirPPGy8sj0WEgIhIRCQQJKJCaE7ozKHRb2Xp/GyClrpRaabUwDCMpRVKMmBhBhRiVPCR63feyGbg71g13QJQ8DJhFmgvmhnknjRN5OjBOgTEFUs54b2DGdDoCcF1WeheqOYMEVBNGB9f96WsiDQMhZkQTZau4CzntVQ3Zr0UdxPbkqhpAFf9Gs/FNQG5bpZbKslRSGsgaWLf9pnpzomZOh4x3QbWgLaGqqCuHPBFPgWlKIPB8vVJrYdtWHh4+cPdwx+EYCOLQKlEEzYm7h3c4wqe5U+eNy7qSuhIY6AKG0eaV4+nEd99/T4uRy/NX1i+PBJzDOLLVTmnGOi+IQRIlpUTOE2k6E/Mbc0jVRE9CmJxqzm1eMEs4Tm+vT1wc9wCSaK0Q1PGoOAooQkCAKQ0kVbIKSRWac326EhQOMTAMmfE48f7dOxDhy/OCy8xtMxRFzFEX3BSzTq9CK0qvEe+Z4/GBaB1RkNYQOmYVDELMoBmJIzFPpLcCUtIAIRPjSLk+s8wvWDuiKtQO3ZxmHSciqtT6gqljWXBX9pQfUBUOaYQU8SGSRPFSeXx8JKii7+45n468/3DPD99/h4jy+FJAnrlcK1EC0h3tipnj5rQFVnXKovQ6cH//HdQC64xoRaRhtoELHiaIA5pH4nAijcPbAIlEEEdCYzVn2xpjrISg9A61QWkGwTE6ISRijMQ8AQH1gFvFuiFeCAFSUsBwr6hUVAVnA+mECPGYiXHgDz/+gBJ4/nyhrCuXecV0AAKBwOXpws9/+sKyrLg1ThF66SwvV7qBdaf7nlw9DfSYKKqY/Bq9bwBEERBABAe6O+aGvH6gdac3BzqIoRoJGlGNqBiuhvSCWwfriAhBAkbHHERtb6vpIB0wUEFT4Hw+cbssHHJmW2e2raJDQAQgUNaNy8uFboaK762AGaVUDN3HA1FUAx4CpoqJYALfosS+CQgsoA5qDIdA5Iio0s0ovdJ7h9aBfe9Ow4iq0kqllY1eC4cgqAZqd8yd6kZpC43OeIhECUSgbxvz5ZmnT58ZpyNDuON8PPGHH75n3v7Iy21mWy6AkiQirXMOQk8REWegoqJM48i6dWpzCAliRLOgyZHUqT6DbW8ExMo/wjnEAIeBMm+01mit7oOZOLgjOFFfI+p1iDNrWBBEHA0RiSABeq80M2IYEFF6g16NVjplLQRJjJOTg3I6jEw5kYIyzwXrgEYMCAjWO3in2EIvG9b6Pr/Afi04bg2RSEphByb+yzHyTUBsu4IIkiLn8cAhZf7n098zzwtL3YgaSDGBdgSI6oBjZmAFs43qiqsyTBOaQAeol42lOmM+gAnbVtkGKIOzXSvaC+fQGTXw8e7Ep9PIcs18+fRMKZ2qgZQyMWVsXWm1cF0+461htUNIqCSMfeCzdSGOE4dpZDgq+o27/iYg220hhEhGCdmJIkQxojS0V0Q6iqMBQhCG4LgZpW2oF5RGCAMpBk7TxHDMHO4nxnFk2zbenT/QtsbnP34Cn0DvKduIW+BPbSFqIMcj43jgdBg55oR2o6wbrTZ62Git0Fqhbpd9CsZI+UzMQr8V3IzaGtvWWGZYK6D/7OT/rwNS5xXPmRwzahBECGoEOuoVtb3HiCESo5JeE1vrG+qNoEYMQkqR42HkdHfi4eMDQ0yUbeP9/Ufm68Lj//6KyITrHaVGalWut43jYeT9w4GUBqZh4JAithW2stHYaYEue7/R6wJiEIUwOGkKrHPFe6X1jVKcdVXa3PfIeQsgwQytBVsv6DExSOL9XWZKIxp2nqP7DD4AkRQzISVO05l9SoPzcWDMme8fHjjdnbn/+IGXU6JuhT//4c95uayUS6HpRCsjt+J72cQo5owHuN4Kl+cbt5cL8+XG9cszISgpBt79eEceR9Z3FY1CmgbO3/1EPj3wX/7T37AtK8fhSEgRCco6P1Hr+jZAhhQRheBGFCcF4XwYiQGWbWMrjbZVxCPKPommFJiGiRAgqHB3GpiGxMf7M9PpyPk4QS1UDRyHRK+d43Fi8wOFA6Xvz17VEE04gVqNbavUbaNuBasFtX1gzAGmQUnjSMiR4ThxfDiTjifCkJFakQCiCir72NHb2wD5d3/+kd4a623mfso8HAa++/iXbGVD6n/jy+PG5TozDQeyZjQcmM53/MVf/MQQIUe4v5uYhsj704TKTiz1xZnrzPPXT9yWSh4C57uPDHc/8eV6pXXjOAxE6SQqpXWerjeu1xe2dUGDITS8GcEnhnDghw935GlgvD9h04GqkSFHNlUu88o4Rg4pITkham8DxLtjrdNbpWwr63ojpIh24xgjbcy044G7u3vy4czqAScQwsg4ZY5jYjxGYhSaC5jgJpS2d7m3rTCvhbYVcq2IVULv4M6UEtKNXjZUnBT36qARMCUFJUchD5GU9+2jAn1rNN+oKhyGgB0i19r3qbfCFAM5vHW42zqtVrZt4XZTolQSO8fwkCLj8cBZjPMPP6KHO/77L8+YKyoDh+mBh/sTYew4jevthpvj3Vg2Z16Nr087H1tuK3mYsekK20ZAOYZA68ZlvRAVxikTR6W5EoIyDpHDmJiOA+OYiCliBvPLTAtCl8LDKZE1U6+N2Bu6Nc6HVxbuLYD0HHBNpD5gGEtZ+Pz0mZwiH98deadnsv4ZNr2jkPhfPz8ipbBeb6xDZk2R7WWhtcp2vVFKY1kKT18ema831vkZsw4Gpl9ozUjDREwZyiN1fWG+/YLZBYkV6wvWFqwH4jBwendmPB8Ig/J0LZStcH25EacrMY/cn468mx746eG4s2cCgr+2/28AxHaCHVGhu1FbpzRn6on04SN308T94cRsA7diBDNolbpu1HWjrIXrvFBLYb0trMvG5brw9fGZeb7StgsC5DQg8wwo71IgidDrhVqe2dYnuq+INpyKe8Pc0SCkKe8sfxCWbWWZNy6XG6MZgzU+PJyZxpG74wPGPov12rD+xhxiy1e2eeXrp8/cnU8cjhPWG700nl9WxnxmPH/g+nRjW1es3rC+8fL8COKstXGdr/TekO7UWuh9g2TIIJT1lWIVoTRnbo173XAv/PzzLyzlxm15otYnYGbMilXlWlfm7cLTi4KcSClSa0c1cr67Q6MQXpsvVeUwHlnrxrotPM+NUt8ISOuV1ivWO603WutgigWhm2IEPCRK75RWwR13o7XKuq6ggcvtgvXOmDJBhNNhIg5K7Qdu00StnXntSEoYgvuut9T1Al4YB2Gqke6J8/2JEHdNZzoM5BTRV+I5DwlxR0bDrIEbrRlbaczLxloLy1ZYN6PUNzZmays0b2gKdOus28IQ7sAHuh6oOrJJ5FIKz8uMiABCrRvPl2eebjeenj8hOD99+JHz/QM/ff8D010mDpHNA19frvzXv/kfLGtl2xq9NXpf8fmR4zHz7sd3nG+B6zKSY2RZCreXhRAjMSY0DYQQGaYTUYUchNvzC+tt5jZXrnPl5WneH2ivbJYx3si63yXFNeHhyPFwYhonxI/7fBJGILJ1p6OggcNhpLbOOl/okjFN0IUYAhkhmSFtJZHJIWAtkFyJ5hyiMKoyRiMD91NmHCPHCD0nojjyMVJLp9ytaIiEEPcoRemS9lmmFGgGzQiSEFXGNFAor3KF7/zMWwHRrORT5uHuHafjPaVOmEdcEhAozTEUQuRwGFmWhcvlmUqikRlzIoVIdiFah7oQOJFEqaaELgRzUoAwKENoZHeGKZMH5aCCD4kUlSnnXZJsFdWAhkip0LrzsnXqVliXgjRH6mvvookxT2DQqGj3tyfVh+NIjsLdFPjhuwfev/tA0we2FviHLwvEwLyt3N+duT8emIfM88sLl+tC74BVYpoIOVGts9bCdQ7I88q8KV++zHx9fOTnv/078qDkQbn6C2Oo/OVdZyJzRMjDRBfl5jsgXrdfRyUWb2xulNbQ2pEO03QP+Z7bZnRz6kulzZX1VrEgfKvuflvKjIEchSkppylyd0q0OLJUJV8qTaD3zjTsIne/JXLam6QcABfSkIkx46o0g3XrhFshVuX6dOX2cqMtK3TwJlS/QeqM73di6JATVQJVlNoDhuNhT6C4UUXoCMGdYA7NSRIJMdBrp1qnVYMG3vYWIrx1/D+KENzwsmG2YLpiMoMGcgTteyYfR0gKj9sN98bh/sz9cCQPEyIDghI7bJtx/dRIT4+oCMvLjVYWPk6JtS27jpIK05D4w09/4O584P7+yC9fX3i+rdhcaAYhvErABq0JvQuK0przcp3JjEQSwTPZM6YDPQRaUjg6/Mta97/WuhuFvWwNTzdIGZLSeqSsQqmNUhteQMV5ud1Yat/pvaCklBEJiAvBhWaNdVm5XTasN7yuYJXghSBGCkI3p9fO82VDNJKmA2t1tub7e4m/6sR76Ywx4KLIUnA3tlrorkSE96d7chr5eDhwW2ae5wurXmlS3wbI9dqprTBvNzYPPM8bKa0gmWKZdS3cbgvYhlnnZYOuiuUEuqtlAGpCssDaOpfLCy+Pn9nmK8epkxOcJtnli5CY55m2dP7uj09cNqPmieelsxRHUyK0zny77LREUPLhRETQ60ynsZQF6U4U56c/u+P9wwf+6i/+kuty5evLI//w/PfctsvbAPmaFUkDmgM3E7bngstXgkam8Y7rbeXp6UrdZsw6erhHUkKCElIgjRHK3tity0z3ynQ60PuJNChRLkBhKStiCQmRZdvJ6f/8t3/k+MtnPvz8CxITGhM//tkf9sgbE+ZGc6fXje6Oa0Ojk7JQ10bpG6svbKy06HgETYp5oPc3+kNuClECh5RYe8GWSrONoBEkMS8zl9uFdZkxM87D3klGHH9N5mYd65V1vdG7EIfIMA2odqxdsW6sy4JaR2KmtE6tjcenC2OGp+dHjuc7puOJjx+NEBJ5SNTe6dZp1ujd94iJSh4ivUFzw6TtX+p4AI0KEvlWEvk2yfzyiSKwBWeMmRQic5upvfPp6TPrXLm9bHh3RJVwXIivXo2yVr788ol2u+K1wdqRMKD5QLNK18ptvVK2G7frI6oJ1cQQjgiRoIHeK9d5pdmeG7ZyYTqc+fGHj6/CGTw+XljXxjQdOB/uOA931LXTq/P+wwPTYaKzIYMyxDPfCZzLG3MIVnZbgYK50N1p3ii9sayVsjZKKew5Pu7DmzvSK4vfcAdfF9Sdc8yEsJfxoIFuzpYCrQsmzl4XAe+oBsYcURViFFIOxOi4V8wbvo/gqAhRAin4rhEPATkrNTV6c6ZDZhjCLrbBntemAdIbW/dEQ4U9+7OwdmEzY+vG89awUvFaiSkjAst8wQzWZWNeFtZ1ZQjKaRj44a/+PedT5uH9Hc07rXeGNHOblWrPSO+INTIzSRPnuxPDFDmcEy7lVRrdWMuFT192r0eQAKbkuG/haVLuh7B7WpoRxwOaBjTDq0RDPmei/8u3/e1O9XxHysrxLvG8zFzXZXf0BcdEaUCznWIM1nFRrBvLvFHKSm8bIgk3uF6fERFSzty2lVILi83UvovngqPSiQIpwnjIDGNkHHeXUghCziNI4DYXYkjEqATdbRe9933aNUEkkHNkmDJo2CPXhG77NC3fEHe/DcjdA+Mx8v77CT7/ie1pxatjzXEROrBaI1rfZUUTWjPmecWtgNddZ+/Oy8sT7kaMgceXF5ayoseEe9stlDgiRgqQkjAdB/IQyUNkGAZSTuSc6eZcbispCTknhiSICKVUxBV1GIeBnBPTlDEXlpeNZkrr+qu6+TZA5voVrwfWdqJ5wCUx5kjvjd5eaG2jW9kpQASx8GoiFDRkgiQQpyPcWtsn0WVmoVPDrvsASBhRCipCHgeGcSAdJ0JUXGCtlbVVLETchUrEOrRSaLXvkmpKuz1HoPWVvmzkERzF++54qtVxIrzVp1qtEc0wDyCZEAamQXFv5DhjMdBjQM0RF/SVD4lRiEEICkENVfAQ6AKbGQ3DBPTVkqsaUAIBI+VEGvLO7use4t06jlP7LnE7Sndwsz0C3RlyRhUEo9eOdaOWBKLYKyC9OS7Gtxzt3wak3zH4HRo/cD4eyPF7DndHWmu8zz9zu164PD9hteLdaRb3amSgwQnqpBBQEYa8cyaiifVaqK0zhkCQ3ZwbSUQSD+/uGaeRaci7dao13J2OU8qGSERl96pq2G2cqCNJXp0IlbqslK3Svtxwd9basZAgZHpJuL0RkNYjvUfMEkonKgyaSTHy7u5MUlDfpQrrndr2J9fNEd2NLDFEgihpNxXTzRDZuc5dTxEGDYgZ0o3du9t3m/erQccBhN2sQ6Nbfy31AUcwF7a6Itjuim6Vbp3gjiP4bkXEpSFR355US42Ummg1gzkJIfeICvz4/j2XIZGTUOtunlm3Rnej9V2FF5wQMiqCYrRaadtGCIAHjsfMOATOx0RdC2UtFK/UuvtPQgjEnHdjn4CL0b2xbAUJAY2RiBJEaFbw3mh1I4gSNJBC2F1LMdIB00bQ9HYZonRh2SrPX5+QXlCraImEIJh2rBdC2A12qmCv/AjNd1u1gMieOFWcIDBqRMNenjUIEnfORDSgKdFqBzN8a5j5XiojmApF9/7lNt8gKB6E/NqgJdkrVaATNBE10kpAQwAJaBBUBQ31H6/p3wxINyilcX25EKwSvBFMiVHQLJi1PfyD7F2gOKJOd/YEK2C+m2gQJ8hur1IN+0uhoaqEtDPpEiOiDasNWSt024+TiOAItRu1VbayYLqD1MLuJCq+Ez85CFE7LokWEsEiREfjnnNU29sBGQAvG1/+tCC2IVSWSQgBLDquAQ+RV0vqq7ruuOyciALiuw8elZ2tikoeI0IgBkdVKBVyHhinxHCXETPq4xdKqSxr3Rs+2c/KBElobjRvVGso4BhlXWilsF1vjHliiAPldMcwJA53A2MemcYJou9HXN4CSBTo3dlKQakIbT+/4r7buILzalN8NSvuHyQiyGv3I68ZLOjeQInu5Vlkp/OQfUYyANX9SXbZnYOhE4JiIeBR0ZgIwRiOJ4J3kndy6Kh3TJwq0JYVYTfu1LrtU3V33EFQQhAkvFGXOQSlmtF6J8VATIEgjSCQouKidARcEJe9JLqjOC6+O3UkoApD2i3eDjTbewt7BWaPod2laKUROnv3qzBNgTiM9JjxnNEYefhhIqRAzIr0G1hFy8J2m7l8/rpbrraKl91/1mul1ZXabkzTO3Ic3xohCvK6L39ttCSg7JHh7NEivt+p7oebkP2k1yszLq9l7hUN4VWd2wEIcedIOs5aC+u6os0Z17rnoCDgATzuxzw8IL63cVEiyLBTD9nBBLuDqBeKLCzbsrcDVUgFbIUayh76bwEkiSIaGGMgvHozIvudmvv+VMUJvEYIr1vk12TqjiC7AfhXxsh5tWza/jsaCCnSeqfWwvI8QzXOnpAYdkLbAtEi6hGxgHdBTAkewDOgxAg6JoIPRIfoxvrkWO+U4qTN6SsU2+jhjUn1NDQYwe/Orzemu9jtnavf8FeTdHi96V9bcZH9OwkQX9tka+AqEPZSmMIObMyRYTxy/FWJmxpWndb3U1vLtp/Daw6y7lXHrjdS3E0ybDPYzoy57wNm8IpKQPIRWmPbHGLCcqY3J0l5GyA57Jy/5oR6ABN6C1SrSN+3wq9nHtT/yXsh6G63BvQVkG6Gu/DrqcjX3bh3siEz5JEhZfB95rjVTt82vDpddqs23THr1L7RVGgqsM270xDbBzkJjMlJKruT2XZqoPZIsEi19o+J/p9b8vs/Q/i/1+8HmX+zfgfkN+t3QH6zfgfkN+t3QH6zfgfkN+v/AMoCKvBFzhC7AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dls.after_batch.decode((preds,))[0][0].show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively we can use fastai's built-in `show_results` function as well:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ddpm_learner.show_results()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Awesome, we have some images vaguely resembling CIFAR10 images!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another useful thing to check is the prediction of the completely denoised image at some timestep. Our sampling takes our prediction of noise in the image but takes only a fraction of it to remove from the noisy image during the iterative process. But we can also try to see the full denoising prediction by fully subtracting out the prediction. Of course, at higher noise levels this will be inaccurate, but at lower noise levels it should be quite accurate." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "eps = TensorImage(xb)\n", "x0 = yb # original images\n", "batch_size = x0.shape[0]\n", "with torch.no_grad():\n", " t = torch.randint(0, ddpm_learner.ddpm.n_steps, (batch_size,), device=x0.device, dtype=torch.long)\n", " alpha_bar_t = ddpm_learner.ddpm.alpha_bar[t].reshape(-1, 1, 1, 1)\n", " xt = torch.sqrt(alpha_bar_t)*x0 + torch.sqrt(1-alpha_bar_t)*eps # noisy images\n", " x0hat = (xt - torch.sqrt(1-alpha_bar_t)*ddpm_learner.model(xt,t))/torch.sqrt(alpha_bar_t) # predicted denoised images" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Timestep 73 is closer to 0 so less noisy but noise is still visible." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([42]),)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.where((t==73).cpu())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can see the original clean image (x0), the noisy image (xt), and the model's attempt to remove the noise (x0hat)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ctxs = get_grid(3,1,3)\n", "ax1 = dls.after_batch.decode((x0,))[0][42].show(ctx=ctxs[0], title='Original')\n", "ax2 = dls.after_batch.decode((xt,))[0][42].show(ctx=ctxs[1], title='Noisy')\n", "ax3 = dls.after_batch.decode((x0hat,))[0][42].show(ctx=ctxs[2], title='Predicted denoised')" ] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [], "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "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.7.11" } }, "nbformat": 4, "nbformat_minor": 4 }