Makine Öğrenmesi
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.
Örnek çözümü göster
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))
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.
Örnek çözümü göster
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]))
Kendini test et
-
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)
- Örnek keskinliği
Cevabı göster
Mod kapsama (çeşitlilik) — Tek tür örnek üreten model, modların çoğunu kaçırır.
-
Her örneği en yakın mod merkezine ata.
atama = ((noktalar[:, None] - merkezler[None]) ** 2).sum(-1).____(axis=1)
Cevabı göster
atama = ((noktalar[:, None] - merkezler[None]) ** 2).sum(-1).argmin(axis=1)
-
Eşleştir.
- kapsama
- Çeşitlilik
- kalite
- Gerçekçilik
- ara değerleme
- Gizil uzay düzgünlüğü
- FID
- Görüntü ölçüsü
Sıradaki ders: Meydan okuma 4