def wgan_generator_loss(gen_noise, gen_net, disc_net):
    """
    Generator loss for Wasserstein GAN (same for WGAN-GP)

    Inputs:
        gen_noise (PyTorch Tensor): Noise to feed through generator
        gen_net (PyTorch Module): Network to generate images from noise
        disc_net (PyTorch Module): Network to determine whether images are real
                                   or fake
    Outputs:
        loss (PyTorch scalar): Generator Loss
    """
    # draw noise
    gen_noise.data.normal_()
    # get generated data
    gen_data = gen_net(gen_noise)
    # feed data through discriminator
    disc_out = disc_net(gen_data)
    # get loss
    loss = -disc_out.mean()
    return loss