CodeBlanks Logo Icon CodeBlanks

Generator

Generator, rastgele gürültüden gerçekçi veri üretir.

Üretici

Üretici, basit bir dağılımdan (genellikle standart normal) alınan z vektörünü veri uzayına eşleyen bir ağdır. Görüntü GAN'larında z ~ N(0, I) 100 boyutlu olur, çıktı 64×64×3 bir resimdir:

G = nn.Sequential(
    nn.Linear(100, 256), nn.ReLU(),
    nn.Linear(256, 784), nn.Tanh())     # 28x28 resim, [-1, 1]

Tek boyutlu en basit hâlinde üretici G(z) = a·z + b olabilir: z ~ N(0, 1) ise G(z) ~ N(b, a²). Hedef N(4, 1.5²) ise ideal üretici a = 1.5, b = 4'tür.

Mod çökmesi

GAN'ların bilinen sorunu mod çökmesidir: üretici, D'yi kandıran tek bir örnek türü bulur ve hep onu üretir. Gerçek veride iki tepe (mod) varken üretici yalnızca birini kapsayabilir:

gercek = np.concatenate([rng.normal(-3, 0.5, 500), rng.normal(3, 0.5, 500)])
cokmus = rng.normal(3, 0.5, 1000)       # yalnızca sağ tepe
print((gercek < 0).mean(), (cokmus < 0).mean())   # 0.5 ve 0.0

Çözümler: Wasserstein kaybı (WGAN), mini-yığın ayırt etme, birden çok üretici.

Uygulama Doğrusal üretici

z ~ N(0, 1) için 100 000 örnek üret. G(z, a, b) fonksiyonunu yaz. Hedef N(4, 1.5²) için doğru (a=1.5, b=4) ve yanlış (a=1, b=0) üreticilerin örnek ortalama ve standart sapmalarını round(..., 1) ile aynı satırda yazdır. Ardından iki tepeli gerçek veride ve çökmüş üreticide negatif örnek oranlarını round(..., 2) ile aynı satırda yazdır.

Başlangıç kodu

model.py
import numpy as np

rng = np.random.default_rng(0)
z = rng.normal(size=100_000)
gercek = np.concatenate([rng.normal(-3, 0.5, 500), rng.normal(3, 0.5, 500)])
cokmus = rng.normal(3, 0.5, 1000)

# buraya yaz

Örnek çözüm

model.py
import numpy as np

rng = np.random.default_rng(0)
z = rng.normal(size=100_000)
gercek = np.concatenate([rng.normal(-3, 0.5, 500), rng.normal(3, 0.5, 500)])
cokmus = rng.normal(3, 0.5, 1000)

def G(z, a, b):
    return a * z + b

for a, b in [(1.5, 4), (1, 0)]:
    s = G(z, a, b)
    print(round(s.mean(), 1) + 0.0, round(s.std(), 1))
print(round((gercek < 0).mean(), 2), round((cokmus < 0).mean(), 2))

Beklenen çıktı

4.0 1.5
0.0 1.0
0.5 0.0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 G(z) = 2z − 1 ve z ~ N(0, 1) ise G(z)'nin ortalaması ve standart sapması nedir?

  • Ortalama 2, std −1
  • Ortalama 0, std 1
  • Ortalama −1, std 4
  • Ortalama −1, std 2 Doğru cevap

Açıklama: Doğrusal dönüşüm ortalamayı kaydırır, std'yi |a| ile çarpar.

2 Görüntü çıktısını [-1, 1] aralığına sıkıştır.

Soru
nn.Linear(256, 784), nn.____())
Cevap
nn.Linear(256, 784), nn.Tanh())

Açıklama: Tanh çıktısı [-1, 1]; Sigmoid [0, 1] verir.

3 Eşleştir.

Kavram Anlamı
z Gürültü girişi
a·z + b N(b, a²)
mod çökmesi Tek tür örnek
WGAN Çökmeye karşı kayıp

Uzman bölümündeki tüm dersler