CodeBlanks Logo Icon CodeBlanks

Meydan okuma 3

GAN generator tanımlarsın.

Meydan okuma: üretici modelleri değerlendirmek

Üretici modelleri değerlendirmek zordur: "gerçekçi" mi, "çeşitli" mi? Bu meydan okumada iki ölçü uygulayacaksın:

  • Mod kapsama: gerçek verideki kümelerin (modların) kaçından en az bir örnek üretilmiş?
  • Gizil ara değerleme: bir otokodlayıcının gizil uzayında iki nokta arasında yürüyünce çıktılar düzgün değişiyor mu?
# mod çökmesi: yüksek kalite, düşük kapsama
# bulanık VAE: yüksek kapsama, düşük keskinlik

Görüntülerde bunların yerini FID ve Precision/Recall gibi ölçüler alır; mantık aynıdır.

Uygulama Mod kapsama

8 mod merkezi bir çember üzerindedir. kapsama(noktalar, merkezler, esik=0.5) fonksiyonunu yaz: her örneği en yakın merkeze ata, merkeze uzaklığı eşikten küçük olanları "kaliteli" say. Kapsanan mod sayısını (en az bir kaliteli örnek) ve kaliteli örnek oranını döndür. Verilen üç üretici (iyi, çökmüş, bulanık) için sonuçları round(..., 2) ile aynı satırda yazdır.

Başlangıç kodu

model.py
import numpy as np

rng = np.random.default_rng(0)
aci = np.arange(8) * 2 * np.pi / 8
merkezler = np.c_[np.cos(aci), np.sin(aci)] * 3
iyi = merkezler[rng.integers(8, size=800)] + rng.normal(0, 0.15, (800, 2))
cokmus = merkezler[rng.integers(2, size=800)] + rng.normal(0, 0.15, (800, 2))
bulanik = merkezler[rng.integers(8, size=800)] + rng.normal(0, 0.8, (800, 2))

# buraya yaz

Örnek çözüm

model.py
import numpy as np

rng = np.random.default_rng(0)
aci = np.arange(8) * 2 * np.pi / 8
merkezler = np.c_[np.cos(aci), np.sin(aci)] * 3
iyi = merkezler[rng.integers(8, size=800)] + rng.normal(0, 0.15, (800, 2))
cokmus = merkezler[rng.integers(2, size=800)] + rng.normal(0, 0.15, (800, 2))
bulanik = merkezler[rng.integers(8, size=800)] + rng.normal(0, 0.8, (800, 2))

def kapsama(noktalar, merkezler, esik=0.5):
    uzak = ((noktalar[:, None] - merkezler[None]) ** 2).sum(-1)
    atama = uzak.argmin(axis=1)
    kaliteli = np.sqrt(uzak.min(axis=1)) < esik
    return len(set(atama[kaliteli])), kaliteli.mean()

for uretici in [iyi, cokmus, bulanik]:
    k, q = kapsama(uretici, merkezler)
    print(k, round(q, 2))

Beklenen çıktı

8 1.0
2 1.0
8 0.18

Uygulama Gizil ara değerleme

Verilen veride SVD ile 2 boyutlu doğrusal bir otokodlayıcı kur (kodla: (x - ort) @ V[:2].T, coz: z @ V[:2] + ort). İlk iki örneğin kodları arasında 5 adımlık ara değerleme yap (np.linspace(0, 1, 5)) ve çöz. Çözülmüş noktaların şeklini yazdır. Ardından ortadaki çıktının uçların ortalamasının çözümüne eşit olduğunu ve ardışık adımlar arası uzaklıkların eşit olduğunu np.allclose ile aynı satırda yazdır.

Başlangıç kodu

model.py
import numpy as np

rng = np.random.default_rng(0)
X = rng.normal(size=(300, 2)) @ rng.normal(size=(2, 6)) + 0.05 * rng.normal(size=(300, 6))
ort = X.mean(axis=0)
_, _, V = np.linalg.svd(X - ort, full_matrices=False)

# buraya yaz

Örnek çözüm

model.py
import numpy as np

rng = np.random.default_rng(0)
X = rng.normal(size=(300, 2)) @ rng.normal(size=(2, 6)) + 0.05 * rng.normal(size=(300, 6))
ort = X.mean(axis=0)
_, _, V = np.linalg.svd(X - ort, full_matrices=False)

kodla = lambda x: (x - ort) @ V[:2].T
coz = lambda z: z @ V[:2] + ort

z0, z1 = kodla(X[0]), kodla(X[1])
t = np.linspace(0, 1, 5)[:, None]
yol = coz((1 - t) * z0 + t * z1)
print(yol.shape)
adimlar = np.linalg.norm(np.diff(yol, axis=0), axis=1)
print(np.allclose(yol[2], coz((z0 + z1) / 2)), np.allclose(adimlar, adimlar[0]))

Beklenen çıktı

(5, 6)
True True

Soru ve cevaplar

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

1 Mod çökmesi yaşayan bir GAN hangi ölçüde düşük puan alır?

  • Eğitim hızı
  • Parametre sayısı
  • Mod kapsama (çeşitlilik) Doğru cevap
  • Örnek keskinliği

Açıklama: Tek tür örnek üreten model, modların çoğunu kaçırır.

2 Her örneği en yakın mod merkezine ata.

Soru
atama = ((noktalar[:, None] - merkezler[None]) ** 2).sum(-1).____(axis=1)
Cevap
atama = ((noktalar[:, None] - merkezler[None]) ** 2).sum(-1).argmin(axis=1)

Açıklama: En küçük uzaklığın indeksi.

3 Eşleştir.

Kavram Anlamı
kapsama Çeşitlilik
kalite Gerçekçilik
ara değerleme Gizil uzay düzgünlüğü
FID Görüntü ölçüsü

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