Tek bir ağ
Tablo ve tüm iş parçacığı için tek bir ağ
Burada oluşturulmuş ve burada eğitilmiş gerçek bir ağ: tablonun yamaları, boyanın sunduğu derinlik ve bu konuşmanın her harfi tek bir ortak alanda. Hiçbir şey önceden eğitilmemiştir.
Tablo, yama yama
Ağ, tabloya her biri kendi ışığına, rengine ve konumuna sahip küçük yamalar halinde bakar ve bu kelimeleri öğrenir. Aynı ağırlıklar ipliğin harflerini okur.
- Eğitilen adımlar
- 0
- Resim hatası
- —
- Harf hatası
- —
- Derinlik hatası
- —
- Kelimelerini bulan parçalar
- —
- Boya parçaları
- 0
- Alanındaki kelimeler
- 0
- Öğrenilen harfler
- 0
- Bilinen karakterler
- 0
Öğrendiği kelimeler boyanın öğretebileceği kelimelerdir: bir yamanın ne kadar parlak olduğu, hangi renkte olduğu, nerede durduğu. Metin işi anlamı değil, harflerin sırasını öğrenir. Burada hiçbir şey önceden eğitilmemiştir; gradyanlar bu sekmede çalışır.
Eğitim, canlı
Sayfa açıldığında kendiliğinden başlar ve tam burada, bu sekmede öğrenir. Her yüz adımda bir ölçtüklerini kaydeder.
Ağın oluşturulması bekleniyor…
Uygulamanın tamamı, Python ve JAX ile
Bu sayfa ve aşağıdaki program tek bir ağdır. Program uygulamanın tamamıdır: bir GTK4 penceresi, JAX gradyanları, tablo, iş parçacığı, tahmin ettiği derinlik ve paylaşılan alan. Kopyalayın veya kaydedin, ardından kendi makinenizde çalıştırın.
- Boya yamaları
- —
- Öğrendiği kelimeler
- —
- Okuduğu harfler
- —
- Birlikte tutulacak dosyalar
- net_gtk.py
Pencerenin ne yaptığı
- 300 veya 2.000 adım eğitin veya yarıda durdurun; öğrenme işlemi bir iş parçacığında çalıştığından pencere aktif kalır.
- Tablonun herhangi bir yamasına tıklayın, size o yama için sahip olduğu kelimeleri söyler.
- Ona kelimelerle sorun — sıcak altın, koyu mavi — ve sorunun denk geldiği yamaları aydınlatır.
- Ona birkaç harf verin, ardından beklediği sonraki harfleri yüzdeleriyle birlikte listeler.
- Kendi yazınızı yapıştırın ve bunun yerine 'Bunu öğren'e basın: yeni harfler aynı tabloda yeni satırlar alır, bildiği hiçbir şey silinmez.
- Tablonun altında iki çizim: tahmin ettiği derinlik ve noktaların boya, karelerin ise kelime olduğu tek bir alan.
- Ağırlıklarını net_weights.json olarak kaydedin ve bir sonraki seferde tekrar yükleyin.
Nasıl çalıştırılır
Bir klasör, bir dosya ve eğer varsa painting.jpg adlı bir tablo. Linux'ta, o klasörde:
-
Python paketlerini yükleyin
python3 -m pip install jax numpy pillow -
GTK4'ü ve Python bağlamalarını yükleyin
sudo apt install python3-gi gir1.2-gtk-4.0 -
Pencereyi açın
python3 net_gtk.py
Windows'ta kısa yol MSYS2'dir: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4, ardından python -m pip install jax numpy pillow, ardından aynı MSYS2 terminalinde python net_gtk.py.
macOS'ta: brew install pygobject3 gtk4, ardından python3 -m pip install jax numpy pillow, ardından python3 net_gtk.py.
Ekran yok mu? python3 net_gtk.py --selftest terminalde eğitilir ve aynı sayıları yazdırır.
Bu dosyanın JAX ile bir terminalde, bu tablo ve bu iş parçacığı üzerinde çalıştırılmasıyla ölçülmüştür: 400 adım → yamaların %67'si kendi kelimelerini bulur (resim hatası 0.68), 2.000 adım → %95 (0.53), 5.000 adım → %97 (0.45). Derinlik hatası 0.0003'te sona erer ve harf hatası 3.05'ten 2.90'a düşer.
Bir tarayıcı Python çalıştıramaz, bu nedenle bu sekme pencere yerine dosyayı gösterir — aynı ağ yukarıda canlı olarak çalışmaktadır. Öğrendiği kelimeler, boyanın öğretebileceği kelimelerdir: bu tabloda mavi renk yoktur, bu nedenle maviyle ilgili bir soru altın renkli bölgelere denk gelir. Harf başlığı harflerin sırasını bilir, anlamını değil.
Yukarıdaki Python ve JAX için bir derleyici
Kutu, tek bir ağın ileri geçişini tutar. Derleyici bunu okur, kontrol eder ve iki kez yazar: JAX için Python ve bu sekmede çalışan JavaScript. Tek bir ağaç, iki arka uç.
- Tokenlar
- —
- Ağaçtaki düğümler
- —
- Fonksiyonlar
- —
Ne hesapladığı
Kontrol, bu sayıları aynı tohumlanmış ağırlıklarda numpy ve JAX'ta çalıştırılan aynı programla karşılaştırır — bu kart mevcut olmadan önce ölçülmüştür, tahmin edilmemiştir.
Dilin izin verdikleri
- girintili bir gövde ile def name(a, b):, name = ..., ve return ...
- Sayılar, isimler, parantezler, tekli eksi ve matris çarpımı için + - * / @.
- transpoz için .T ve tanh, sqrt, exp, log, sum, mean, maximum çağrıları.
- Bunların dışındaki her şey, tahmin yürütmek yerine derleyiciyi satır ve sütun bilgisiyle durdurur.
Bu, küçük bir dil için gerçek bir derleyicidir, bir Python çalışma zamanı değildir: döngüler yok, sınıflar yok, içe aktarmalar yok. Tek bir ağın ileri geçişi bunun içine sığar, bu nedenle aynı metin makinenizde JAX'a, bu sekmede ise JavaScript'e dönüşebilir.
Sanal gözler: sadece pikselleri görür
Monitöre yöneltilmiş bir göz: sadece görüntüyü alır, başka hiçbir şeyi değil — sayfa yok, veri yok, ağ yok. Sadece bu piksellerden kenarları, köşeleri ve göz yanlara doğru hareket ettikçe her noktanın nasıl kaydığını bulur ve buradan her şeyin uzayda nerede durduğunu yeniden inşa eder.
- Görülen kareler
- 0
- Köşeler
- 0
- Takip Edilen
- 0
- Medyan hareket
- —
- Derinlik bulundu
- —
- Uzaydaki noktalar
- 0
- Bir kare
- —
Derinlik gerçek geometridir, ancak yalnızca gözün adım boyutu kadar ve yalnızca görüntünün dokusu olduğu yerlerde — düz boya tutunacak hiçbir şey vermez. Bir duvarın nerede durduğunu görmek, onun bir duvar olduğunu bilmek değildir ve burada hiçbir şey bir dünya icat etmez: yukarıdaki oda, ölçülmüş piksellerdir.
Fikriniz ve hala neye ihtiyaç duyacağı
- Monitördeki gözler gerçek bir arayüzdür: ekranı bir insanın okuduğu şekilde okuyan bir modelin her program için eklentiye ihtiyacı yoktur — görünür olan her şey zaten girdidir.
- Hareket eden bir gözün iki karesinden geometri elde edersiniz, ki bu tam olarak bir dünya modelinin uyması gereken şeydir; bu kart bu kısmı gerçekten yapar.
- Gerçek zamanlı olarak oluşturulan bir dünya, kimsenin görmediği şeyi icat eden, siz döndükçe bunu tutarlı tutan ve milisaniyeler içinde çalışan bir modele de ihtiyaç duyar — bu bu sekmede yoktur ve bir sayfa bunu eğitemez.
- Dürüst sınır: bu göz şeylerin nerede olduğunu kurtarır, ne anlama geldiklerini değil. Görme hızı anlamak değildir ve biri diğerinden çok daha kolaydır.
Görsel: Leonardo da Vinci'nin Son Akşam Yemeği tablosunun kamu malı taraması, Wikimedia Commons.
