Diskriminatorverlust
Jetzt ist es Zeit, den Verlust für den Diskriminator festzulegen. Denk dran, dass der Diskriminator Bilder als echt oder gefälscht einstufen soll. Deshalb hat der Generator einen Verlust, wenn er die Ausgaben des Generators als echt (Label „ 1
”) oder die echten Bilder als gefälscht (Label „ 0
”) einstuft.
Definiere die Funktion „ disc_loss()
“, die den Diskriminatorverlust berechnet. Es braucht fünf Argumente:
gen
, das Generatormodelldisc
, das Diskriminator-Modellreal
Ein paar echte Bilder aus den Trainingsdatennum_images
, die Anzahl der Bilder im Stapelz_dim
, die Größe des eingegebenen Zufallsrauschens
Diese Übung ist Teil des Kurses
Deep Learning für Bilder mit PyTorch
Anleitung zur Übung
- Verwende den Diskriminator, um die Bilder „
fake
“ zu klassifizieren und die Vorhersagen „disc_pred_fake
“ zuzuordnen. - Berechne die falsche Verlustkomponente, indem du „
criterion
“ für die Vorhersagen des Diskriminators für falsche Bilder und einen Tensor mit Nullen derselben Form aufrufst. - Verwende den Diskriminator, um die Bilder „
real
“ zu klassifizieren und die Vorhersagen „disc_pred_real
“ zuzuordnen. - Berechne den tatsächlichen Verlustanteil, indem du „
criterion
“ für die Vorhersagen des Diskriminators für echte Bilder und den Tensor „ones“ mit derselben Form aufrufst.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
def disc_loss(gen, disc, real, num_images, z_dim):
criterion = nn.BCEWithLogitsLoss()
noise = torch.randn(num_images, z_dim)
fake = gen(noise)
# Get discriminator's predictions for fake images
disc_pred_fake = ____
# Calculate the fake loss component
fake_loss = ____
# Get discriminator's predictions for real images
disc_pred_real = ____
# Calculate the real loss component
real_loss = ____
disc_loss = (real_loss + fake_loss) / 2
return disc_loss