Problems
Loading...
Step 3 of 6
GAN Loss Functions
Medium

Implement the discriminator and non-saturating generator losses from a GAN forward pass.

LD=−1N∑i=1N[log⁡pireal+log⁡(1−pifake)]L_D = -\frac{1}{N}\sum_{i=1}^{N}\left[\log p_i^{\mathrm{real}} + \log\left(1-p_i^{\mathrm{fake}}\right)\right] LG=−1N∑i=1Nlog⁡pifakeL_G = -\frac{1}{N}\sum_{i=1}^{N}\log p_i^{\mathrm{fake}}

Here, NN is the batch size, pirealp_i^{\mathrm{real}} is the discriminator probability for real sample ii, and pifakep_i^{\mathrm{fake}} is its probability for fake sample ii. Clip probabilities to [10−8,1−10−8][10^{-8}, 1-10^{-8}] before taking logarithms. Return a dictionary containing discriminator_loss and generator_loss as Python floats.

Loading visualization...

Examples

Input: real_probs = [0.9,0.95], fake_probs = [0.1,0.05]

Output: {"discriminator_loss":0.156654,"generator_loss":2.649159}

Explanation: The discriminator loss rewards high real probabilities and low fake probabilities, while the non-saturating generator loss rewards high fake probabilities.

Input: real_probs = [0.5,0.5], fake_probs = [0.5,0.5]

Output: {"discriminator_loss":1.386294,"generator_loss":0.693147}

Input: real_probs = [0.8,0.6,0.9], fake_probs = [0.2,0.4,0.1]

Output: {"discriminator_loss":0.559553,"generator_loss":1.609438}

Hint 1

Use NumPy clipping before applying the logarithm.

Hint 2

Average each loss over the batch dimension.

Requirements

  • Use NumPy.
  • Compute the discriminator binary cross-entropy over real and fake probabilities.
  • Compute the non-saturating generator loss from fake probabilities.
  • Clip probabilities with ϵ=10−8\epsilon=10^{-8} before logarithms.
  • Return exactly the two documented float values.

Constraints

  • Both probability arrays have shape (N)(N) and the same nonzero length.
  • Every probability lies in [0,1][0, 1].
  • 1≤N≤81 \le N \le 8.