Antrenarea GAN-urilor

Deep Learning pentru imagini cu PyTorch

Michal Oleszak

Machine Learning Engineer

Obiectivul generatorului

 

 

Diagramă a fluxului GAN.

  • Obiectiv: Generarea de false care să înșele discriminatorul
  • Idee: Utilizarea discriminatorului pentru a evalua performanța generatorului
  • Ieșirile generatorului clasificate de discriminator ca:
    • Reale (eticheta 1) - bine, pierdere mică
    • False (eticheta 0) - rău, pierdere mare
Deep Learning pentru imagini cu PyTorch

Pierderea generatorului

def gen_loss(gen, disc, num_images, z_dim):

noise = torch.randn(num_images, z_dim)
fake = gen(noise)
disc_pred = disc(fake)
criterion = nn.BCEWithLogitsLoss()
gen_loss = criterion( disc_pred, torch.ones_like(disc_pred) ) return gen_loss
  • Definirea zgomotului aleatoriu
  • Generarea imaginii false
  • Obținerea predicției discriminatorului pentru imaginea falsă
  • Utilizarea criteriului de entropie încrucișată binară (BCE)
  • Pierderea generatorului: BCE între predicțiile discriminatorului și un tensor de unu
Deep Learning pentru imagini cu PyTorch

Obiectivul discriminatorului

 

 

Diagramă a fluxului GAN.

  • Obiectiv: Clasificarea corectă a imaginilor false și reale
  • Ieșirile generatorului trebuie clasificate ca false (eticheta 0)
  • Imaginile reale trebuie clasificate ca reale (eticheta 1)
Deep Learning pentru imagini cu PyTorch

Pierderea discriminatorului

def disc_loss(gen, disc, real, num_images, z_dim):

criterion = nn.BCEWithLogitsLoss()
noise = torch.randn(num_images, z_dim)
fake = gen(noise)
disc_pred_fake = disc(fake)
fake_loss = criterion( disc_pred_fake, torch.zeros_like(disc_pred_fake) )
disc_pred_real = disc(real)
real_loss = criterion( disc_pred_real, torch.ones_like(disc_pred_real) )
disc_loss = (real_loss + fake_loss) / 2 return disc_loss
  • Definirea criteriului de entropie încrucișată binară
  • Generarea zgomotului de intrare pentru generator
  • Generarea imaginilor false
  • Obținerea predicțiilor discriminatorului pentru imagini false
  • Calcularea componentei de pierdere pentru false
  • Obținerea predicțiilor discriminatorului pentru imagini reale
  • Calcularea componentei de pierdere pentru reale
  • Pierderea finală este media dintre componentele reale și false
Deep Learning pentru imagini cu PyTorch

Bucla de antrenare GAN

for epoch in range(num_epochs):
    for real in dataloader:
        cur_batch_size = len(real)


disc_opt.zero_grad()
disc_loss = disc_loss( gen, disc, real, cur_batch_size, z_dim=16)
disc_loss.backward() disc_opt.step()
gen_opt.zero_grad()
gen_loss = gen_loss( gen, disc, cur_batch_size, z_dim=16)
gen_loss.backward() gen_opt.step()
  • Iterarea peste epoci și loturi de date reale; calcularea dimensiunii lotului curent
  • Resetarea gradienților optimizatorului discriminatorului
  • Calcularea pierderii discriminatorului
  • Calcularea gradienților discriminatorului și efectuarea pasului de optimizare
  • Resetarea gradienților optimizatorului generatorului
  • Calcularea pierderii generatorului
  • Calcularea gradienților generatorului și efectuarea pasului de optimizare
Deep Learning pentru imagini cu PyTorch

Să exersăm!

Deep Learning pentru imagini cu PyTorch

Preparing Video For Download...