In this chapter, we looked at GANs and the adversarial training process. In the first section, a theoretical explanation of the adversarial training process was presented, with a focus on the value function, which is used to formulate the problem as a min-max game. We also showed how the non-saturating value function is, in practice, the solution to making the Generator learn how to solve the saturation problem.
We then looked at implementing the Generator and Discriminator models that are used to create an unconditional GAN in pure TensorFlow 2.0. In this section, the expressive power of TensorFlow 2.0 and the definition of custom training loops was presented. In fact, it has been shown how straightforward it is to create Keras models and write the custom training loop that implements the adversarial training process, just by following the steps described in the GAN paper...