real_loss = cross_entropy(tf.ones_like(real_output), real_output)
    fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)
    total_loss = real_loss + fake_loss
    return total_loss


def generator_loss(fake_output):
    return cross_entropy(tf.ones_like(fake_output), fake_output)


generator_optimizer, discriminator_optimizer = model_builder.get_optimizers()

checkpoint_dir = './training_checkpoints'
checkpoint_prefix = 'ckpt'
checkpoint = model_builder.get_checkpoint(checkpoint_dir, checkpoint_prefix,
                                          generator_optimizer,
                                          discriminator_optimizer, generator,
                                          discriminator)
checkpoint_manager = tf.train.CheckpointManager(checkpoint,
                                                checkpoint_dir,
                                                max_to_keep=3)

if (args.checkpoint is not None):
    checkpoint.restore(args.checkpoint)

seed = tf.random.normal([num_examples_to_generate, noise_dim])

rand_gen = tf.random.Generator.from_seed(1234)
rand = rand_gen.uniform([num_examples_to_generate],
                        minval=0,
                        maxval=num_words - 1,
                        dtype=tf.dtypes.int32)