GAN'lerin eğitimi

PyTorch ile Görüntüler için Deep Learning

Michal Oleszak

Machine Learning Engineer

Üreteç amacı

 

 

GAN iş akışı diyagramı.

  • Amaç: Ayrımcıyı kandıracak sahteler üretmek
  • Fikir: Ayrımcıyı, üretecin başarımı hakkında geri bildirim için kullanın
  • Üretecin çıktıları ayrımcı tarafından şöyle sınıflanır:
    • Gerçek (etiket 1) - iyi, küçük kayıp
    • Sahte (etiket 0) - kötü, büyük kayıp
PyTorch ile Görüntüler için Deep Learning

Üreteç kaybı

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
  • Rastgele gürültüyü tanımlayın
  • Sahte görüntü üretin
  • Ayrımcının sahte görüntüye tahminini alın
  • İkili çapraz entropi (BCE) kullanın
  • Üreteç kaybı: Ayrımcı tahminleri ile birler tensörü arasındaki BCE
PyTorch ile Görüntüler için Deep Learning

Ayrımcı amacı

 

 

GAN iş akışı diyagramı.

  • Amaç: Sahte ve gerçek görüntüleri doğru sınıflamak
  • Üretecin çıktıları sahte (etiket 0) olmalıdır
  • Gerçek görüntüler gerçek (etiket 1) olmalıdır
PyTorch ile Görüntüler için Deep Learning

Ayrımcı kaybı

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
  • İkili çapraz entropi kriterini tanımlayın
  • Üreteç için girdi gürültüsü üretin
  • Sahte görüntüler üretin
  • Ayrımcının sahte görüntüler için tahminlerini alın
  • Sahte kayıp bileşenini hesaplayın
  • Gerçek görüntüler için ayrımcı tahminlerini alın
  • Gerçek kayıp bileşenini hesaplayın
  • Nihai kayıp: gerçek ve sahte kayıpların ortalaması
PyTorch ile Görüntüler için Deep Learning

GAN eğitim döngüsü

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()
  • Dönemler ve gerçek veri yığınları üzerinde döngü kurun, geçerli yığın boyutunu hesaplayın
  • Ayrımcı iyileştiricisinin gradyanlarını sıfırlayın
  • Ayrımcı kaybını hesaplayın
  • Ayrımcı gradyanlarını hesaplayın ve adımı uygulayın
  • Üreteç iyileştiricisinin gradyanlarını sıfırlayın
  • Üreteç kaybını hesaplayın
  • Üreteç gradyanlarını hesaplayın ve adımı uygulayın
PyTorch ile Görüntüler için Deep Learning

Ayo berlatih!

PyTorch ile Görüntüler için Deep Learning

Preparing Video For Download...