Ders 13 / 14
Video ve Zamansal Modeller
Kare başına kararın zaman içindeki tutarsızlığının sayılması: otuz altı sınama dizisinin 432 karesinde her kareye baskın sınıfı yazan taban 0,7014 doğruluk ve 0 kararsızlık verirken gerçek etiket dizileri 71 geçiş taşıyor. Bağımsız kare kararı 0,8634 doğrulukla 99 geçiş üretiyor, yani gerçeğin 28 fazlası. Aynı puanlara geçiş cezası uygulandığında ceza 0,05'te doğruluk 0,8657'ye çıkıyor, ceza 0,15'te kararsızlık gerçeğin 71'ine oturuyor ve ceza 4,00'te karar tabanın kendisine, 0,7014 ve 1 geçişe iniyor: alanın tabanı bu ölçütte ayrı bir yordam değil, cezanın uç değeridir.
İçindekiler
Önceki ders piksel kararını komşularına bakarak verdi ve komşuluk penceresi örtüşme oranını 0,2431 oynattı. O komşuluk uzaydaydı: bir pikselin sekiz komşusu aynı karenin içindeydi. Bir kapsama ağı kareyi tek tek değil arka arkaya üretir; aynı bölge belirli aralıklarla yeniden okunur ve okumalar bir dizi oluşturur. Bu dizinin komşuluğu zamandadır ve dersin sorusu şudur: her kareye bağımsız karar veren bir yordam, zamanı hiç kullanmadığında ne kaybediyor.
Kayıp, kare doğruluğuna bakılarak görülmez. Bir olay gerçekte başlar, bir süre sürer ve biter; etiket dizisi bu yüzden iki üç kez değişir. Kare başına bağımsız karar veren bir yordam ise gürültü her yön değiştirdiğinde fikir değiştirir. Bu dersin ikinci ölçütü kararsızlıktır: ardışık iki karede kararın kaç kez değiştiği. Ölçüt yeni bir soru da getiriyor, çünkü hiçbir şey öğrenmeyen taban bu ölçütte sıfır alır.
- BG40. Zamansal kurgu, 04. dersin karesinin kısa bir dizisidir. Aynı 12x12 gri düzeyli kapsama karesi bir bölge için on iki kez üretilir; zemin, blok düzeyi ve gürültü aynıdır, tohum 20260218.
- BG41. Olay bir aralıktır. Kurgu blok, dizinin ardışık iki ila beş karesinde bulunur; başlangıç karesi birinci ile yedinci kare arasındadır. Kare etiketi bloğun o karede bulunup bulunmadığıdır.
- BG42. İki gürültü kaynağı vardır. Etkin karelerin yaklaşık üçte birinde okuma zayıftır ve blok sönük görünür; etkin olmayan karelerin yaklaşık yedide birinde geçici parlak bir leke belirir. Birincisi kaçırma, ikincisi yanlış alarm üretir.
- BG43. Bölme 24/36 dizidir, yani sınamada 432 kare vardır. Bölme dizi düzeyindedir; aynı dizinin kareleri iki kümeye dağıtılmaz.
- BG44. Alanın tabanı her kareye baskın sınıfı yazmaktır. Baskın sınıf “etkin değil”dir.
- BG45. İki ölçüt yan yana okunur. Kare doğruluğu (büyük iyi) ve kararsızlık: ardışık karelerde kararın kaç kez değiştiği. Kararsızlıkta küçük olan iyi değildir; okunacak sayı gerçek etiket dizilerinin kararsızlığıdır ve o sayı da basılır.
- BG46. Kare modeli doğrusaldır ve kare başına üç sayıdan uydurulur: ortalama gri düzey, en parlak 3x3 pencerenin ortalaması, eşik üstü piksel oranı. En küçük kareler, eşik 0,5. Kütüphane çağrılmaz.
- BG47. Zamanı kullanan karar aynı puanları kullanır. Model, ağırlıklar ve kare puanları değişmez; yalnız dizinin tamamına geçiş başına sabit bir ceza eklenir ve en düşük maliyetli karar dizisi seçilir.
Zamansal Kurgu ve İki Taban Sayısı
# dizi.py — MODELDIR. Zamansal kurgu, 04. dersin gri duzeyli 12x12 kapsama # karesinin KISA BIR DIZISIDIR: ayni bolge on iki kez okunur ve olay # karelerin bir bolumunde etkindir. Tohum 20260218. TOHUM, M32, BOY, KARE = 20260218, 0xFFFFFFFF, 12, 12 ZEMIN, BLOK, GURULTU = 0.30, 0.74, 0.30 def uretec(t): x = ((t ^ (t >> 16)) * 2246822507) & M32 x = ((x ^ (x >> 13)) * 3266489909) & M32 s = [(x ^ (x >> 16)) & M32] def sonraki(): s[0] = (s[0] * 1664525 + 1013904223) & M32 return s[0] / 4294967296 return sonraki def dizi(no): """Bir bolgenin on iki karelik okumasi: kareler ve kare basina olay etiketi.""" r = uretec(TOHUM + 500000 + no) bas, boy = 1 + int(r() * 7), 2 + int(r() * 4) h, w = 2 + int(r() * 3), 2 + int(r() * 3) sy, sx = int(r() * (BOY - h + 1)), int(r() * (BOY - w + 1)) kareler, etiket = [], [] for t in range(KARE): etkin = bas <= t < bas + boy g = [[ZEMIN + (r() + r() + r() - 1.5) * GURULTU for _ in range(BOY)] for _ in range(BOY)] if etkin: guc = 0.35 if r() < 0.28 else 1.0 # bazi karelerde okuma zayif for i in range(sy, sy + h): for j in range(sx, sx + w): g[i][j] += (BLOK - ZEMIN) * guc elif r() < 0.14: # gecici parlak leke a, b = int(r() * (BOY - 1)), int(r() * (BOY - 1)) for i in (a, a + 1): for j in (b, b + 1): g[i][j] += BLOK - ZEMIN kareler.append(g) etiket.append(int(etkin)) return kareler, etiket VERI = [dizi(i) for i in range(60)] EGT, SIN = VERI[:24], VERI[24:] TOPLAM = len(SIN) * KARE ETKIN = sum(sum(e) for _, e in SIN) TABAN = (TOPLAM - ETKIN) / TOPLAM GERCEK_KARARSIZ = sum(sum(e[t] != e[t - 1] for t in range(1, KARE)) for _, e in SIN) print(f"kurgu: {len(VERI)} dizi x {KARE} kare, egitim {len(EGT)}, sinama {len(SIN)}; " f"sinamada {ETKIN}/{TOPLAM} kare etkin") print(f"taban - her kareye baskin sinifi (etkin degil) yazmak: " f"kare dogrulugu {TABAN:.4f}, kararsizlik 0") print(f"gercek etiket dizilerinin kararsizligi: {GERCEK_KARARSIZ} gecis " f"({GERCEK_KARARSIZ / len(SIN):.2f} dizi basina)")
kurgu: 60 dizi x 12 kare, egitim 24, sinama 36; sinamada 129/432 kare etkin taban - her kareye baskin sinifi (etkin degil) yazmak: kare dogrulugu 0.7014, kararsizlik 0 gercek etiket dizilerinin kararsizligi: 71 gecis (1.97 dizi basina)
Alanın tabanı iki sayı veriyor ve ikisi birbirine karşıt yönde okunuyor. Kare doğruluğunda 0,7014 alıyor, çünkü 432 karenin yalnız 129’u etkin. Kararsızlıkta 0 alıyor, çünkü hiç fikir değiştirmiyor; bir sabiti tekrarlayan yordam bu ölçütte yenilemez.
Üçüncü satır ölçütün nasıl okunacağını söylüyor. Gerçek etiket dizileri 36 dizide toplam 71 geçiş taşıyor, dizi başına 1,97. Bir olay başlıyor ve bitiyorsa iki geçiş olur; dizinin son karesine kadar sürenlerde bir geçiş kalır. Kararsızlıkta küçük olan iyi değildir: aranan sayı sıfır değil, 71’dir. Tabanın sıfırı gerçeğin altındadır ve bu, ölçütün tek başına okunamayacağının en açık biçimidir.
Bağımsız Kare Kararı
def oznitelik(g): """Kare basina uc sayi: ortalama gri duzey, en parlak 3x3 pencere, esik ustu oran.""" top = sum(sum(s) for s in g) enp = 0.0 for i in range(BOY - 2): for j in range(BOY - 2): p = sum(g[i + a][j + b] for a in range(3) for b in range(3)) / 9.0 if p > enp: enp = p ust = sum(1 for s in g for v in s if v > 0.55) / (BOY * BOY) return [1.0, top / (BOY * BOY), enp, ust] def coz(A, b): n, x = len(b), [0.0] * len(b) M = [A[i][:] + [b[i]] for i in range(n)] for k in range(n): p = max(range(k, n), key=lambda r: abs(M[r][k])) M[k], M[p] = M[p], M[k] for r in range(k + 1, n): f = M[r][k] / M[k][k] for c in range(k, n + 1): M[r][c] -= f * M[k][c] for k in range(n - 1, -1, -1): x[k] = (M[k][n] - sum(M[k][c] * x[c] for c in range(k + 1, n))) / M[k][k] return x def egit(kume): """Kare basina dogrusal karar islevi; en kucuk karelerle uydurulur. MODELDIR.""" A, b = [[0.0] * 4 for _ in range(4)], [0.0] * 4 for kareler, etiket in kume: for g, y in zip(kareler, etiket): x = oznitelik(g) for p in range(4): b[p] += x[p] * y for q in range(4): A[p][q] += x[p] * x[q] return coz(A, b) W = egit(EGT) SKOR = [[sum(a * c for a, c in zip(W, oznitelik(g))) for g in kareler] for kareler, _ in SIN] BAGIMSIZ = [[1 if s >= 0.5 else 0 for s in d] for d in SKOR] def olc(kararlar): dogru = sum(k == y for kd, (_, e) in zip(kararlar, SIN) for k, y in zip(kd, e)) kararsiz = sum(sum(kd[t] != kd[t - 1] for t in range(1, KARE)) for kd in kararlar) return dogru / TOPLAM, kararsiz d, kz = olc(BAGIMSIZ) print(f"bagimsiz kare karari: kare dogrulugu {d:.4f}, kararsizlik {kz} gecis " f"({kz / len(SIN):.2f} dizi basina)") print(f"taban ile fark: dogrulukta {d - TABAN:+.4f}, kararsizlikta {kz - 0:+d}")
bagimsiz kare karari: kare dogrulugu 0.8634, kararsizlik 99 gecis (2.75 dizi basina) taban ile fark: dogrulukta +0.1620, kararsizlikta +99
Birinci ölçütte model tabanı 0,1620 geçiyor ve bu, kare başına verilen kararın gerçekten bir şey öğrendiğini söylüyor. İkinci ölçütte aynı model tabanın 99 geçiş üstünde. Sayının okunacağı yer gerçeğin 71’idir: model, gerçekliğin fikir değiştirdiğinden 28 kez fazla fikir değiştiriyor, oran olarak yüzde 39 fazla. Dizi başına bakıldığında gerçekte 1,97 geçiş varken kararda 2,75 geçiş var.
Bu fazlalık kare doğruluğuna neredeyse hiç yansımaz. Bir dizide olayın ortasındaki tek bir karede fikir değiştirmek doğruluktan yalnız 1/432 götürür, ama kararsızlığa iki geçiş ekler. Bir kapsama ağında bu farkın karşılığı somuttur: aynı bölge için ardışık iki okumada iki ayrı uyarı üretilmesi demektir ve uyarıyı okuyan taraf için bu, doğruluk kaybından daha pahalıdır.
Geçiş Cezası ile Zamanı Kullanan Karar
def gecis_cezali(skor, ceza): """Zamani kullanan karar: kare maliyeti + gecis basina sabit ceza.""" maliyet = [[(skor[0] - s) ** 2 for s in (0, 1)]] geri = [[0, 0]] for t in range(1, len(skor)): yeni, iz = [0.0, 0.0], [0, 0] for s in (0, 1): en, arg = None, 0 for p in (0, 1): m = maliyet[t - 1][p] + (0.0 if p == s else ceza) if en is None or m < en: en, arg = m, p yeni[s], iz[s] = en + (skor[t] - s) ** 2, arg maliyet.append(yeni) geri.append(iz) s = 0 if maliyet[-1][0] <= maliyet[-1][1] else 1 yol = [s] for t in range(len(skor) - 1, 0, -1): s = geri[t][s] yol.append(s) return yol[::-1] print(f"{'ceza':>6}{'kare dogrulugu':>16}{'kararsizlik':>13}{'dizi basina':>13}") for ceza in (0.00, 0.05, 0.15, 0.40, 1.00, 4.00): d, kz = olc([gecis_cezali(skor, ceza) for skor in SKOR]) print(f"{ceza:>6.2f}{d:>16.4f}{kz:>13}{kz / len(SIN):>13.2f}") print(f"{'gercek':>6}{1.0:>16.4f}{GERCEK_KARARSIZ:>13}" f"{GERCEK_KARARSIZ / len(SIN):>13.2f}") print(f"{'taban':>6}{TABAN:>16.4f}{0:>13}{0.0:>13.2f}") ZAMANLI = [gecis_cezali(skor, 0.15) for skor in SKOR] en = max(range(len(SIN)), key=lambda i: sum(BAGIMSIZ[i][t] != BAGIMSIZ[i][t - 1] for t in range(1, KARE))) print(f"en cok fikir degistiren sinama dizisi ({en + 1}. sirada):") for ad, d in (("gercek ", SIN[en][1]), ("bagimsiz", BAGIMSIZ[en]), ("zamanli ", ZAMANLI[en])): print(f" {ad} " + "".join(str(v) for v in d))
ceza kare dogrulugu kararsizlik dizi basina 0.00 0.8634 99 2.75 0.05 0.8657 86 2.39 0.15 0.8611 71 1.97 0.40 0.8472 45 1.25 1.00 0.7801 21 0.58 4.00 0.7014 1 0.03 gercek 1.0000 71 1.97 taban 0.7014 0 0.00 en cok fikir degistiren sinama dizisi (18. sirada): gercek 000111110000 bagimsiz 000101100010 zamanli 000101100000
Tablonun ilk satırı ikinci bölümün sayılarıdır: sıfır ceza, bağımsız kare kararının kendisidir. Sıfır cezada her kare kendi puanının en yakın olduğu değere yuvarlanır ve dizi hiçbir rol oynamaz. Ceza büyüdükçe aynı puanlar aynı kalır — model, ağırlıklar ve kare puanları hiç değişmez — ama kararlar değişir.
Farkın nereden geldiği bu yüzden kesin biçimde söylenebilir. Temsil değişmedi: kare başına aynı üç sayı. Model değişmedi: aynı doğrusal işlev, aynı ağırlıklar. Değişen tek şey kararın zaman içinde nadiren değiştiği varsayımıdır ve o varsayım tek bir sayıyla, geçiş cezasıyla girildi. Altı satır, aynı modelin altı ayrı çıktısıdır.
Cezanın kendisi bir varsayımın sayıya çevrilmiş halidir: bir geçişin maliyeti, bir karede yanılmanın maliyetiyle aynı birimden yazılır. Ceza 0,15 demek, bir geçişi ancak o geçişi haklı çıkaran kare kanıtı yeterince güçlüyse kabul etmek demektir. Bu, olayın ne kadar sürdüğü hakkında dolaylı bir varsayımdır ve kurguda olaylar iki ile beş kare arasında sürüyor.
Değiş tokuş üç yerde okunuyor. Doğruluk 0,05 cezada 0,8657 ile en yüksek değerine çıkıyor, kararsızlık 99’dan 86’ya iniyor; küçük bir ceza hem doğruluk hem kararlılık kazandırıyor. Ceza 0,15’te kararsızlık 71‘e, yani gerçeğin sayısına oturuyor ve bunun bedeli en yüksek doğruluktan 0,0046 vermek. Ceza büyümeye devam ettiğinde doğruluk düşüyor: 0,40’ta 0,8472, 1,00’de 0,7801.
Son satır kursun ikinci iddiasını bu ders için ödüyor. Ceza 4,00’te karar dizisi neredeyse sabite iniyor — 36 dizide 1 geçiş — ve kare doğruluğu 0,7014’e, yani tabanın kendi sayısına düşüyor. Alanın tabanı burada ayrı bir yordam değil, cezanın uç değeridir; sonsuz cezayla uygulanan zamansal düzeltme, her kareye baskın sınıfı yazmakla aynı çıktıyı verir. Kararsızlığı tek başına küçültmeye çalışan bir ayar, sonunda hiçbir şey öğrenmemiş yordama varır.
Son üç satır bunu tek bir dizide gösteriyor. Gerçek dizi beş karelik bir olay taşıyor; bağımsız karar olayın ortasında bir kare kaçırıyor ve olay bittikten sonra bir kare yanlış alarm veriyor, altı geçiş. Zamanı kullanan karar yanlış alarmı siliyor ve dört geçişe iniyor, ama ortadaki boşluğu dolduramıyor: o karede puan yeterince düşüktür ve 0,15 ceza onu çevirmeye yetmez. Geçiş cezası kararı düzleştirir, kaçırılan kareyi geri getirmez.
Özet
- Kare başına kararın iki ölçütü vardır: kare doğruluğu ve ardışık karelerde kaç kez fikir değiştiğini sayan kararsızlık. Taban birincisinde 0,7014, ikincisinde 0 alır.
- Kararsızlıkta küçük olan iyi değildir; okunacak sayı gerçek etiket dizilerinin kararsızlığıdır ve o sayı 36 dizide 71 geçiştir.
- Bağımsız kare kararı 0,8634 doğrulukla 99 geçiş üretiyor: gerçeğin 28 fazlası, dizi başına 2,75 yerine 1,97. Bu fazlalık kare doğruluğunda neredeyse görünmez.
- Geçiş cezası temsili ve modeli değiştirmeden altı ayrı çıktı üretiyor; 0,05’te doğruluk 0,8657 ile en yükseğine çıkıyor, 0,15’te kararsızlık gerçeğin 71’ine oturuyor.
- Ceza 4,00’te karar tabanın kendisine iniyor (0,7014 ve 1 geçiş): alanın tabanı bu ölçütte ayrı bir yordam değil, cezanın uç değeridir.
Sonraki Adım
Beş derste girdi hep aynı türdendi: bir gri düzey ızgarası, tek kare ya da kısa bir dizi olarak. Bu kursun ilk sekiz dersinde ise girdi bir metindi ve aynı kurgu ölçüm ağının notlarından geliyordu. İki kip şimdiye kadar ayrı ayrı ölçüldü; oysa saha ekibinin bir olay için düştüğü not ile aynı olayın kapsama karesi aynı olaya aittir. Sonraki ders ikisini tek bir uzayda buluşturur ve şunu sorar: bir not ile bir görüntünün aynı olaya ait olup olmadığını söyleyen bir temsil, rastgele eşleştirmenin ne kadar üstüne çıkar ve tek kip tek başına bunun ne kadarını verir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.