diff --git "a/docs/notebooks/ex10a - dcgan.ipynb" "b/docs/notebooks/ex10a - dcgan.ipynb" new file mode 100644--- /dev/null +++ "b/docs/notebooks/ex10a - dcgan.ipynb" @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","metadata":{"id":"rF2x3qooyBTI"},"source":["# Deep Convolutional Generative Adversarial Network"]},{"cell_type":"markdown","metadata":{"id":"ITZuApL56Mny"},"source":["This tutorial demonstrates how to generate images of handwritten digits using a [Deep Convolutional Generative Adversarial Network](https://arxiv.org/pdf/1511.06434.pdf) (DCGAN). The code is written using the [Keras Sequential API](https://www.tensorflow.org/guide/keras) with a `tf.GradientTape` training loop."]},{"cell_type":"markdown","metadata":{"id":"2MbKJY38Puy9"},"source":["## What are GANs?\n","[Generative Adversarial Networks](https://arxiv.org/abs/1406.2661) (GANs) are one of the most interesting ideas in computer science today. Two models are trained simultaneously by an adversarial process. A *generator* (\"the artist\") learns to create images that look real, while a *discriminator* (\"the art critic\") learns to tell real images apart from fakes.\n","\n","

\n","\n","During training, the *generator* progressively becomes better at creating images that look real, while the *discriminator* becomes better at telling them apart. The process reaches equilibrium when the *discriminator* can no longer distinguish real images from fakes.\n","\n","

\n","\n","This notebook demonstrates this process on the MNIST dataset. The following animation shows a series of images produced by the *generator* as it was trained for 50 epochs. The images begin as random noise, and increasingly resemble hand written digits over time.\n","\n","

\n","\n","To learn more about GANs, see MIT's [Intro to Deep Learning](http://introtodeeplearning.com/) course."]},{"cell_type":"markdown","metadata":{"id":"e1_Y75QXJS6h"},"source":["### Setup"]},{"cell_type":"code","execution_count":1,"metadata":{"id":"WZKbyU2-AiY-","executionInfo":{"status":"ok","timestamp":1659030576303,"user_tz":240,"elapsed":2914,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# import\n","import tensorflow as tf"]},{"cell_type":"code","execution_count":2,"metadata":{"id":"wx-zNbLqB4K8","colab":{"base_uri":"https://localhost:8080/","height":36},"executionInfo":{"status":"ok","timestamp":1659030576303,"user_tz":240,"elapsed":7,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"bb235054-9868-4693-b662-bb333605de90"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["'2.8.2'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":2}],"source":["tf.__version__"]},{"cell_type":"code","execution_count":3,"metadata":{"id":"YzTlj4YdCip_","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1659030602687,"user_tz":240,"elapsed":26390,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"219054b0-5d29-49d2-80ac-4d822502210a"},"outputs":[{"output_type":"stream","name":"stdout","text":["Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n","Collecting git+https://github.com/tensorflow/docs\n"," Cloning https://github.com/tensorflow/docs to /tmp/pip-req-build-1yca307p\n"," Running command git clone -q https://github.com/tensorflow/docs /tmp/pip-req-build-1yca307p\n","Requirement already satisfied: astor in /usr/local/lib/python3.7/dist-packages (from tensorflow-docs==0.0.0.dev0) (0.8.1)\n","Requirement already satisfied: absl-py in /usr/local/lib/python3.7/dist-packages (from tensorflow-docs==0.0.0.dev0) (1.2.0)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.7/dist-packages (from tensorflow-docs==0.0.0.dev0) (2.11.3)\n","Requirement already satisfied: protobuf<3.20,>=3.12.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow-docs==0.0.0.dev0) (3.17.3)\n","Requirement already satisfied: pyyaml in /usr/local/lib/python3.7/dist-packages (from tensorflow-docs==0.0.0.dev0) (3.13)\n","Requirement already satisfied: six>=1.9 in /usr/local/lib/python3.7/dist-packages (from protobuf<3.20,>=3.12.0->tensorflow-docs==0.0.0.dev0) (1.15.0)\n","Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.7/dist-packages (from jinja2->tensorflow-docs==0.0.0.dev0) (2.0.1)\n","Building wheels for collected packages: tensorflow-docs\n"," Building wheel for tensorflow-docs (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for tensorflow-docs: filename=tensorflow_docs-0.0.0.dev0-py3-none-any.whl size=180247 sha256=12cc7e97afd40c7ec6b4c79354ad5dd766206ef446d53d48ed164d7b876efc18\n"," Stored in directory: /tmp/pip-ephem-wheel-cache-guqnide1/wheels/cc/c4/d8/5341e93b6376c5c929c49469fce21155eb69cef1a4da4ce32c\n","Successfully built tensorflow-docs\n","Installing collected packages: tensorflow-docs\n","Successfully installed tensorflow-docs-0.0.0.dev0\n"]}],"source":["# To generate GIFs\n","# !pip install imageio\n","!pip install git+https://github.com/tensorflow/docs"]},{"cell_type":"code","execution_count":4,"metadata":{"id":"YfIk2es3hJEd","executionInfo":{"status":"ok","timestamp":1659030602687,"user_tz":240,"elapsed":11,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# import\n","import glob\n","import imageio\n","import matplotlib.pyplot as plt\n","import numpy as np\n","import os\n","import PIL\n","from tensorflow.keras import layers\n","import time\n","\n","from IPython import display"]},{"cell_type":"markdown","metadata":{"id":"iYn4MdZnKCey"},"source":["### Load and prepare the dataset\n","\n","You will use the MNIST dataset to train the generator and the discriminator. The generator will generate handwritten digits resembling the MNIST data."]},{"cell_type":"code","execution_count":5,"metadata":{"id":"a4fYMGxGhrna","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1659030603260,"user_tz":240,"elapsed":583,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"369ec8ce-d814-452a-fe55-2acbea6ba292"},"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n","11493376/11490434 [==============================] - 0s 0us/step\n","11501568/11490434 [==============================] - 0s 0us/step\n"]}],"source":["# get data\n","(train_images, train_labels), (_, _) = tf.keras.datasets.mnist.load_data()"]},{"cell_type":"code","execution_count":6,"metadata":{"id":"NFC2ghIdiZYE","executionInfo":{"status":"ok","timestamp":1659030603261,"user_tz":240,"elapsed":8,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["#rescale\n","train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')\n","train_images = (train_images - 127.5) / 127.5 # Normalize the images to [-1, 1]"]},{"cell_type":"code","source":["# display shape\n","train_images.shape, type(train_images)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"CsIROTs1zWSG","executionInfo":{"status":"ok","timestamp":1659030603261,"user_tz":240,"elapsed":8,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"35228570-15dc-448a-876d-a13a47b9c128"},"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/plain":["((60000, 28, 28, 1), numpy.ndarray)"]},"metadata":{},"execution_count":7}]},{"cell_type":"code","source":["# labels\n","train_labels.shape, type(train_labels), np.unique(train_labels)"],"metadata":{"id":"88h4t6pT2ldg","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1659030603262,"user_tz":240,"elapsed":8,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"6dc3d920-deca-4551-d18b-1c440cb88bfa"},"execution_count":8,"outputs":[{"output_type":"execute_result","data":{"text/plain":["((60000,), numpy.ndarray, array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8))"]},"metadata":{},"execution_count":8}]},{"cell_type":"markdown","source":["This is the information you need to verify if you use your own dataset."],"metadata":{"id":"g5PjXIvVzbPc"}},{"cell_type":"code","execution_count":9,"metadata":{"id":"S4PIDhoDLbsZ","executionInfo":{"status":"ok","timestamp":1659030603262,"user_tz":240,"elapsed":6,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# args\n","BUFFER_SIZE = 60000\n","BATCH_SIZE = 256"]},{"cell_type":"code","execution_count":10,"metadata":{"id":"-yKCCQOoJ7cn","executionInfo":{"status":"ok","timestamp":1659030606428,"user_tz":240,"elapsed":2462,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# Batch and shuffle the data\n","train_dataset = tf.data.Dataset.from_tensor_slices(train_images).shuffle(BUFFER_SIZE).batch(BATCH_SIZE)"]},{"cell_type":"code","source":["# train_dataset\n","train_dataset, type(train_dataset)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"0RtaLSObzi94","executionInfo":{"status":"ok","timestamp":1659030606428,"user_tz":240,"elapsed":4,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"d0d1fb8a-b1d8-4d32-ce39-3603a5191fca"},"execution_count":11,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(,\n"," tensorflow.python.data.ops.dataset_ops.BatchDataset)"]},"metadata":{},"execution_count":11}]},{"cell_type":"markdown","metadata":{"id":"THY-sZMiQ4UV"},"source":["## Create the models\n","\n","Both the generator and discriminator are defined using the [Keras Sequential API](https://www.tensorflow.org/guide/keras#sequential_model)."]},{"cell_type":"markdown","metadata":{"id":"-tEyxE-GMC48"},"source":["### The Generator\n","\n","The generator uses `tf.keras.layers.Conv2DTranspose` (upsampling) layers to produce an image from a seed (random noise). Start with a `Dense` layer that takes this seed as input, then upsample several times until you reach the desired image size of 28x28x1. Notice the `tf.keras.layers.LeakyReLU` activation for each layer, except the output layer which uses tanh."]},{"cell_type":"markdown","source":["We use *assert* for debugging purpose. If there is an error in the code, the *assert* function will raise this error. The API for *assert* is [here](https://www.w3schools.com/python/ref_keyword_assert.asp#:~:text=The%20assert%20keyword%20is%20used,program%20will%20raise%20an%20AssertionError.)."],"metadata":{"id":"msfaH8ZYz6FC"}},{"cell_type":"code","execution_count":12,"metadata":{"id":"6bpTcDqoLWjY","executionInfo":{"status":"ok","timestamp":1659030606428,"user_tz":240,"elapsed":2,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# define generator\n","def make_generator_model():\n","\n"," # use sequential API\n"," model = tf.keras.Sequential()\n","\n"," # start with dense layers \n"," model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,)))\n"," model.add(layers.BatchNormalization())\n"," model.add(layers.LeakyReLU())\n","\n"," # reshape\n"," model.add(layers.Reshape((7, 7, 256)))\n"," assert model.output_shape == (None, 7, 7, 256) # Note: None is the batch size\n","\n"," # add Conv2DTranspose layer\n"," model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))\n"," assert model.output_shape == (None, 7, 7, 128)\n"," model.add(layers.BatchNormalization())\n"," model.add(layers.LeakyReLU())\n","\n"," # add Conv2DTranspose layer\n"," model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False))\n"," assert model.output_shape == (None, 14, 14, 64)\n"," model.add(layers.BatchNormalization())\n"," model.add(layers.LeakyReLU())\n","\n"," # add Conv2DTranspose layer\n"," model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))\n"," assert model.output_shape == (None, 28, 28, 1)\n","\n"," return model"]},{"cell_type":"markdown","metadata":{"id":"GyWgG09LCSJl"},"source":["Use the (as yet untrained) generator to create an image."]},{"cell_type":"code","execution_count":13,"metadata":{"id":"gl7jcC7TdPTG","colab":{"base_uri":"https://localhost:8080/","height":282},"executionInfo":{"status":"ok","timestamp":1659030618723,"user_tz":240,"elapsed":12297,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"ac7ecb57-e00b-4f93-dc73-92cc2a546c84"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":13},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}],"source":["# create generator model\n","generator = make_generator_model()\n","\n","# create noise and throw noise into the generator\n","noise = tf.random.normal([1, 100])\n","generated_image = generator(noise, training=False)\n","\n","# plot an output from generator that is untrained\n","plt.imshow(generated_image[0, :, :, 0], cmap='gray')"]},{"cell_type":"markdown","metadata":{"id":"D0IKnaCtg6WE"},"source":["### The Discriminator\n","\n","The discriminator is a CNN-based image classifier. Notice that in the beginning of the `make_discriminator_model()` function below the input_shape must be the same as the output shape of the generator."]},{"cell_type":"code","execution_count":14,"metadata":{"id":"dw2tPLmk2pEP","executionInfo":{"status":"ok","timestamp":1659030618724,"user_tz":240,"elapsed":5,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# define discriminator model\n","def make_discriminator_model():\n","\n"," # use sequential API\n"," model = tf.keras.Sequential()\n","\n"," # add Conv2D layer\n"," model.add(layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same', input_shape=[28, 28, 1]))\n"," model.add(layers.LeakyReLU())\n"," model.add(layers.Dropout(0.3))\n","\n"," # add Conv2D layer\n"," model.add(layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same'))\n"," model.add(layers.LeakyReLU())\n"," model.add(layers.Dropout(0.3))\n","\n"," # flatten and output 1 neuron\n"," model.add(layers.Flatten())\n"," model.add(layers.Dense(1))\n","\n"," return model"]},{"cell_type":"markdown","metadata":{"id":"QhPneagzCaQv"},"source":["Use the (as yet untrained) discriminator to classify the generated images as real or fake. The model will be trained to output positive values for real images, and negative values for fake images."]},{"cell_type":"code","execution_count":15,"metadata":{"id":"gDkA05NE6QMs","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1659030619059,"user_tz":240,"elapsed":339,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"30c235bd-ba36-47fe-a1ed-30e88e9f4ac5"},"outputs":[{"output_type":"stream","name":"stdout","text":["tf.Tensor([[-0.00146685]], shape=(1, 1), dtype=float32)\n"]}],"source":["# define discriminator\n","discriminator = make_discriminator_model()\n","decision = discriminator(generated_image)\n","print(decision)"]},{"cell_type":"markdown","source":["## How does GAN learn?\n","\n","According to the [original paper](https://arxiv.org/pdf/1406.2661.pdf), we can set up the situation as the following. Suppose the discriminator is $D(x; \\theta_d)$ using noisy data $x \\sim p_z(z)$ where $p_z$ is some prior distribution and the generator is $G(z; \\theta_g)$. Then the goal is to learn to train $D$ to maximize the probability of assigning the correct label to both training examples and samples from $G$. We simultaneously train $G$ to minimize $\\log(1 - D(G(z)))$.\n","\n","In other words, $D$ and $G$ play the following two-layer minimax game with the objective function $\\mathcal{V}(G, D)$:\n","$$ \\min_G \\max_D \\mathcal{V}(D, G) = \\mathbb{E}_{x \\sim p_{\\text{data}(x)}} [\\log D(x)] + \\mathbb{E}_{z \\sim p_z(z)} [\\log (1 - D(G(z)))]$$\n","\n","In each learning step, the gradient for the discriminator is updated:\n","$$\\nabla_{\\theta_d} \\frac{1}{m} \\sum_{i=1}^m [\\log D(x^{(i)}) + \\log(1 - D(G(z^{(i)})))]$$\n","where $m$ refers to samples and the gradient is taken w.r.t $\\theta_d$ (parameters for the discriminator $D$).\n","\n","The gradient for the generator is updated:\n","$$\\nabla_{\\theta_g} \\frac{1}{m} \\sum_{i=1}^m \\log(1 - D(G(z^{(i)})))$$\n","where $m$ refers to the samples and the gradient is taken w.r.t. $\\theta_g$ (parameters for the generator $G$)."],"metadata":{"id":"OuPl5e3JCOEf"}},{"cell_type":"markdown","metadata":{"id":"0FMYgY_mPfTi"},"source":["## Define the loss and optimizers\n","\n","Define loss functions and optimizers for both models.\n"]},{"cell_type":"code","execution_count":16,"metadata":{"id":"psQfmXxYKU3X","executionInfo":{"status":"ok","timestamp":1659030619060,"user_tz":240,"elapsed":10,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# This method returns a helper function to compute cross entropy loss\n","cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)"]},{"cell_type":"markdown","metadata":{"id":"Jd-3GCUEiKtv"},"source":["### Generator loss\n","The generator's loss quantifies how well it was able to trick the discriminator. Intuitively, if the generator is performing well, the discriminator will classify the fake images as real (or 1). Here, compare the discriminators decisions on the generated images to an array of 1s."]},{"cell_type":"code","execution_count":17,"metadata":{"id":"90BIcCKcDMxz","executionInfo":{"status":"ok","timestamp":1659030619060,"user_tz":240,"elapsed":10,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# def loss for generator\n","def generator_loss(fake_output):\n"," return cross_entropy(tf.ones_like(fake_output), fake_output)"]},{"cell_type":"markdown","metadata":{"id":"PKY_iPSPNWoj"},"source":["### Discriminator loss\n","\n","This method quantifies how well the discriminator is able to distinguish real images from fakes. It compares the discriminator's predictions on real images to an array of 1s, and the discriminator's predictions on fake (generated) images to an array of 0s."]},{"cell_type":"code","source":["# check\n","tf.ones_like([1,2,3]), tf.zeros_like([1,2,3])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"dO3db2Ut5Hzu","executionInfo":{"status":"ok","timestamp":1659030619060,"user_tz":240,"elapsed":9,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"78bf5df2-12ce-4398-a02a-9478f568f0b9"},"execution_count":18,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(,\n"," )"]},"metadata":{},"execution_count":18}]},{"cell_type":"code","execution_count":19,"metadata":{"id":"wkMNfBWlT-PV","executionInfo":{"status":"ok","timestamp":1659030619061,"user_tz":240,"elapsed":8,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# def loss for discriminator\n","def discriminator_loss(real_output, fake_output):\n"," real_loss = cross_entropy(tf.ones_like(real_output), real_output)\n"," fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)\n"," total_loss = real_loss + fake_loss\n"," return total_loss"]},{"cell_type":"markdown","metadata":{"id":"MgIc7i0th_Iu"},"source":["## Optimizers\n","\n","The discriminator and the generator optimizers are different since you will train two networks separately."]},{"cell_type":"code","execution_count":20,"metadata":{"id":"iWCn_PVdEJZ7","executionInfo":{"status":"ok","timestamp":1659030619061,"user_tz":240,"elapsed":8,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# define two separate optimizer for the generator and the discriminator\n","generator_optimizer = tf.keras.optimizers.Adam(1e-4)\n","discriminator_optimizer = tf.keras.optimizers.Adam(1e-4)"]},{"cell_type":"markdown","metadata":{"id":"mWtinsGDPJlV"},"source":["### Save checkpoints\n","This notebook also demonstrates how to save and restore models, which can be helpful in case a long running training task is interrupted."]},{"cell_type":"code","execution_count":21,"metadata":{"id":"CA1w-7s2POEy","executionInfo":{"status":"ok","timestamp":1659030619062,"user_tz":240,"elapsed":9,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# save and checkpoint\n","checkpoint_dir = './training_checkpoints'\n","checkpoint_prefix = os.path.join(checkpoint_dir, \"ckpt\")\n","checkpoint = tf.train.Checkpoint(generator_optimizer=generator_optimizer,\n"," discriminator_optimizer=discriminator_optimizer,\n"," generator=generator,\n"," discriminator=discriminator)"]},{"cell_type":"markdown","metadata":{"id":"Rw1fkAczTQYh"},"source":["## Define the training loop\n"]},{"cell_type":"code","execution_count":40,"metadata":{"id":"NS2GWywBbAWo","executionInfo":{"status":"ok","timestamp":1659031447977,"user_tz":240,"elapsed":305,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# args\n","EPOCHS = 50\n","noise_dim = 100\n","num_examples_to_generate = 25\n","\n","# You will reuse this seed overtime (so it's easier)\n","# to visualize progress in the animated GIF)\n","seed = tf.random.normal([num_examples_to_generate, noise_dim])"]},{"cell_type":"code","source":["# check\n","seed.shape, type(seed)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"s3DjF6pn1Iok","executionInfo":{"status":"ok","timestamp":1659031447977,"user_tz":240,"elapsed":4,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"d6583609-61a4-4d2c-c331-edc9ba2283b4"},"execution_count":41,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(TensorShape([25, 100]), tensorflow.python.framework.ops.EagerTensor)"]},"metadata":{},"execution_count":41}]},{"cell_type":"markdown","metadata":{"id":"jylSonrqSWfi"},"source":["The training loop begins with generator receiving a random seed as input. That seed is used to produce an image. The discriminator is then used to classify real images (drawn from the training set) and fakes images (produced by the generator). The loss is calculated for each of these models, and the gradients are used to update the generator and discriminator."]},{"cell_type":"code","execution_count":42,"metadata":{"id":"3t5ibNo05jCB","executionInfo":{"status":"ok","timestamp":1659031447977,"user_tz":240,"elapsed":3,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# Notice the use of `tf.function`\n","# This annotation causes the function to be \"compiled\".\n","@tf.function\n","def train_step(images):\n","\n"," # args\n"," noise = tf.random.normal([BATCH_SIZE, noise_dim])\n","\n"," # use gradient tape\n"," with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:\n"," generated_images = generator(noise, training=True)\n","\n"," real_output = discriminator(images, training=True)\n"," fake_output = discriminator(generated_images, training=True)\n","\n"," gen_loss = generator_loss(fake_output)\n"," disc_loss = discriminator_loss(real_output, fake_output)\n","\n"," # compute gradients\n"," gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)\n"," gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)\n","\n"," # apply gradients\n"," generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))\n"," discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))"]},{"cell_type":"markdown","source":["Notice that the `train()` function saves images in the current directory."],"metadata":{"id":"xw0A4Sw36pxl"}},{"cell_type":"code","execution_count":51,"metadata":{"id":"2M7LmLtGEMQJ","executionInfo":{"status":"ok","timestamp":1659031992816,"user_tz":240,"elapsed":270,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# training\n","def train(dataset, epochs):\n","\n"," # for loop: this loop iterates epochs\n"," for epoch in range(epochs):\n"," start = time.time()\n","\n"," # for loop: iterate images in the dataset\n"," for image_batch in dataset:\n"," train_step(image_batch)\n","\n"," # produce images for the GIF as you go\n"," display.clear_output(wait=True)\n"," generate_and_save_images(\n"," generator,\n"," epoch + 1,\n"," seed)\n","\n"," # save the model every 15 epochs\n"," if (epoch + 1) % 15 == 0:\n"," checkpoint.save(file_prefix = checkpoint_prefix)\n","\n"," # print statement\n"," print ('Time for epoch {} is {} sec'.format(epoch + 1, time.time()-start))\n"," print('...')\n"," print('...')\n"," print('...')\n"," print('...')\n","\n"," # generate after the final epoch\n"," display.clear_output(wait=True)\n"," generate_and_save_images(generator, epochs, seed)"]},{"cell_type":"markdown","metadata":{"id":"2aFF7Hk3XdeW"},"source":["**Generate and save images**\n"]},{"cell_type":"code","execution_count":52,"metadata":{"id":"RmdVsmvhPxyy","executionInfo":{"status":"ok","timestamp":1659031993091,"user_tz":240,"elapsed":277,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# def function\n","def generate_and_save_images(model, epoch, test_input):\n"," # Notice `training` is set to False.\n"," # This is so all layers run in inference mode (batchnorm).\n"," predictions = model(test_input, training=False)\n","\n"," # figure\n"," fig = plt.figure(figsize=(5, 5))\n"," for i in range(predictions.shape[0]):\n"," plt.subplot(5, 5, i+1)\n"," if i == 0:\n"," plt.title('ep='+str(epoch))\n"," plt.imshow(predictions[i, :, :, 0] * 127.5 + 127.5, cmap='gray')\n"," plt.axis('off')\n","\n"," # save and display\n"," plt.savefig('image_at_epoch_{:04d}.png'.format(epoch))\n"," plt.show()"]},{"cell_type":"markdown","metadata":{"id":"dZrd4CdjR-Fp"},"source":["## Train the model\n","Call the `train()` method defined above to train the generator and discriminator simultaneously. Note, training GANs can be tricky. It's important that the generator and discriminator do not overpower each other (e.g., that they train at a similar rate).\n","\n","At the beginning of the training, the generated images look like random noise. As training progresses, the generated digits will look increasingly real. After about 50 epochs, they resemble MNIST digits. This may take about one minute / epoch with the default settings on Colab."]},{"cell_type":"code","execution_count":53,"metadata":{"id":"Ly3UN0SLLY2l","colab":{"base_uri":"https://localhost:8080/","height":319},"executionInfo":{"status":"ok","timestamp":1659032256959,"user_tz":240,"elapsed":263868,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"8dc8953a-50ac-4046-d9ae-15a0229387d9"},"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}],"source":["# train\n","train(train_dataset, EPOCHS)"]},{"cell_type":"markdown","metadata":{"id":"rfM4YcPVPkNO"},"source":["Restore the latest checkpoint."]},{"cell_type":"code","execution_count":54,"metadata":{"id":"XhXsd0srPo8c","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1659032256960,"user_tz":240,"elapsed":11,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"e370906f-17df-4635-8f45-b7b94deec8ad"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":54}],"source":["# restore checkpoint\n","checkpoint.restore(tf.train.latest_checkpoint(checkpoint_dir))"]},{"cell_type":"markdown","metadata":{"id":"P4M_vIbUi7c0"},"source":["## Create a GIF\n"]},{"cell_type":"code","execution_count":55,"metadata":{"id":"WfO5wCdclHGL","executionInfo":{"status":"ok","timestamp":1659032256960,"user_tz":240,"elapsed":5,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# Display a single image using the epoch number\n","def display_image(epoch_no):\n"," return PIL.Image.open('image_at_epoch_{:04d}.png'.format(epoch_no))"]},{"cell_type":"code","execution_count":56,"metadata":{"id":"5x3q9_Oe5q0A","colab":{"base_uri":"https://localhost:8080/","height":377},"executionInfo":{"status":"ok","timestamp":1659032256961,"user_tz":240,"elapsed":6,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"5b254498-0dfb-428c-8b15-390d13486400"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""],"image/png":"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\n"},"metadata":{},"execution_count":56}],"source":["# display\n","display_image(EPOCHS)"]},{"cell_type":"markdown","metadata":{"id":"NywiH3nL8guF"},"source":["Use `imageio` to create an animated gif using the images saved during training. Notice that this creates the GIF file in the current directory."]},{"cell_type":"code","execution_count":57,"metadata":{"id":"IGKQgENQ8lEI","executionInfo":{"status":"ok","timestamp":1659032257380,"user_tz":240,"elapsed":423,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}}},"outputs":[],"source":["# args\n","anim_file = 'dcgan.gif'\n","\n","# write gif\n","with imageio.get_writer(anim_file, mode='I') as writer:\n"," filenames = glob.glob('image*.png')\n"," filenames = sorted(filenames)\n"," for filename in filenames:\n"," image = imageio.imread(filename)\n"," writer.append_data(image)\n"," image = imageio.imread(filename)\n"," writer.append_data(image)"]},{"cell_type":"code","execution_count":58,"metadata":{"id":"ZBwyU6t2Wf3g","colab":{"base_uri":"https://localhost:8080/","height":382,"output_embedded_package_id":"1jbEOLu0KVWY1cHvErkOhkubbdRSU1FRc"},"executionInfo":{"status":"ok","timestamp":1659032267541,"user_tz":240,"elapsed":10163,"user":{"displayName":"Yiqiao Yin","userId":"16271867367914268422"}},"outputId":"eb4574fc-e390-418d-b837-d971e8aa32b3"},"outputs":[{"output_type":"display_data","data":{"text/plain":"Output hidden; open in https://colab.research.google.com to view."},"metadata":{}}],"source":["# plot gif\n","import tensorflow_docs.vis.embed as embed\n","embed.embed_file(anim_file)"]},{"cell_type":"markdown","metadata":{"id":"k6qC-SbjK0yW"},"source":["## Next steps\n"]},{"cell_type":"markdown","metadata":{"id":"xjjkT9KAK6H7"},"source":["This tutorial has shown the complete code necessary to write and train a GAN. It is an adaption from this [Tensorflow notebook](https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/generative/dcgan.ipynb). As a next step, you might like to experiment with a different dataset, for example the Large-scale Celeb Faces Attributes (CelebA) dataset [available on Kaggle](https://www.kaggle.com/jessicali9530/celeba-dataset). To learn more about GANs see the [NIPS 2016 Tutorial: Generative Adversarial Networks](https://arxiv.org/abs/1701.00160).\n"]}],"metadata":{"accelerator":"GPU","colab":{"collapsed_sections":[],"name":"ex10 - dcgan.ipynb","provenance":[{"file_id":"https://github.com/tensorflow/docs/blob/master/site/en/tutorials/generative/dcgan.ipynb","timestamp":1657820300439}],"toc_visible":true},"kernelspec":{"display_name":"Python 3","name":"python3"},"gpuClass":"standard"},"nbformat":4,"nbformat_minor":0} \ No newline at end of file