Meydan okuma 3
- Makine Öğrenmesi kursu
- Uzman
- Ders 43/44
- 8 dk
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 keskinlikGö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
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
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
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
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.
atama = ((noktalar[:, None] - merkezler[None]) ** 2).sum(-1).____(axis=1)
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ü |