डिस्क्रिमिनेटर लॉस
अब डिस्क्रिमिनेटर के लिए लॉस परिभाषित करने का समय है. याद रखें, डिस्क्रिमिनेटर का काम इमेज को रियल या फेक के रूप में क्लासिफाई करना है. इसलिए, अगर वह जेनरेटर के आउटपुट को रियल (लेबल 1) या रियल इमेज को फेक (लेबल 0) क्लासिफाई करता है, तो जेनरेटर को लॉस होता है.
disc_loss() फंक्शन परिभाषित करें जो डिस्क्रिमिनेटर का लॉस गणना करता है. यह पाँच आर्ग्युमेंट लेता है:
gen, जेनरेटर मॉडलdisc, डिस्क्रिमिनेटर मॉडलreal, ट्रेनिंग डेटा से रियल इमेज का सैंपलnum_images, बैच में इमेज की संख्याz_dim, इनपुट रैंडम नॉइज़ का साइज
यह अभ्यास पाठ्यक्रम का हिस्सा है
PyTorch के साथ इमेज के लिए डीप लर्निंग
अभ्यास निर्देश
- डिस्क्रिमिनेटर का उपयोग करके
fakeइमेज को क्लासिफाई करें और प्रेडिक्शन कोdisc_pred_fakeमें असाइन करें. - फेक लॉस घटक निकालने के लिए फेक इमेज के लिए डिस्क्रिमिनेटर के प्रेडिक्शन और उसी shape वाले zeros टेन्सर पर
criterionकॉल करें. - डिस्क्रिमिनेटर का उपयोग करके
realइमेज को क्लासिफाई करें और प्रेडिक्शन कोdisc_pred_realमें असाइन करें. - रियल लॉस घटक निकालने के लिए रियल इमेज के लिए डिस्क्रिमिनेटर के प्रेडिक्शन और उसी shape वाले ones टेन्सर पर
criterionकॉल करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
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