Back to Cntk

CNTK Examples: Image/GAN

Examples/Image/GAN/README.md

2015-12-082.2 KB
Original Source

CNTK Examples: Image/GAN

Overview

Data:The MNIST dataset (http://yann.lecun.com/exdb/mnist/) of handwritten digits.
PurposeThis folder contains an implementation of a distributed trainer for the generative model shown in CNTK 206: Part A - Basic GAN with MNIST data(https://cntk.ai/pythondocs/CNTK_206A_Basic_GAN.html).
NetworkGenerative Adversarial Network.
TrainingStochastic gradient descent with momentum.
CommentsSee below.

Running the example

Getting the data

Please refer to CNTK 206: Part A - Basic GAN with MNIST data(https://cntk.ai/pythondocs/CNTK_206A_Basic_GAN.html) for the instructions on getting the data and for an introduction to generative models.

Executing the example

We use MPI to execute the distributed trainer. For this purpose, let's assume that the MINST dataset is available in a location similar to base_dir\CNTK\Examples\Image\DataSets\MNIST. We can execute the example using the following MPI command.

mpiexec -n 4 python Basic_GAN_Distributed.py --datadir base_dir\CNTK\Examples\Image\DataSets\MNIST

Like CNTK 206: Part A, the distributed example also has fast mode and full mode of execution. The default execution is set to fast mode and once completed, it shows the generated images and display the training loss. For the complete execution, please set the variable isFast = False in the example.

Details

A GAN network is composed of two sub-networks, one called the Generator and the other Discriminator, each of which has its own learner and a learning scheduling. The learning schedule for the Discriminator and the Generator need not be the same. For this example, we use two different trainers to train the Discriminator and the Generator of the GAN model. However, should they have the same learning schedule, then we could use a single trainer with multiple learners to train the GAN model. A similar pattern can be used for other networks where two or more different learners perform the parameter learning using different algorithms. This is facilitated by the CNTK Trainer API (https://cntk.ai/pythondocs/cntk.train.trainer.html?highlight=trainer#module-cntk.train.trainer), in which the trainer accepts a list of learners at it constructor.