One Network: JAX dan Virtual Eyes
Loading...
The app: one network in Python and JAX

Satu jaringan

Satu jaringan untuk lukisan dan seluruh utas

Jaringan nyata, dibangun di sini dan dilatih di sini: bagian-bagian lukisan, kedalaman yang disarankan oleh cat, dan setiap huruf dari percakapan ini, dalam satu ruang bersama. Tidak ada yang dilatih sebelumnya.

Lukisan, bagian demi bagian

Jaringan melihat lukisan dalam bagian-bagian kecil, masing-masing dengan cahaya, warna, dan posisi tersendiri, lalu mempelajari kata-kata tersebut. Bobot yang sama membaca huruf-huruf dari utas tersebut.

Seluruh aplikasi, dalam Python dan JAX

Halaman ini dan program di bawah ini adalah satu jaringan. Program ini adalah keseluruhan aplikasi: jendela GTK4, gradien JAX, lukisan, thread, kedalaman yang diprediksi, dan ruang bersama. Salin atau simpan, lalu jalankan di mesin Anda sendiri.

Bercak cat
—
Kata-kata yang dipelajari
—
Huruf yang dibaca
—
Berkas yang harus tetap bersama
net_gtk.py
net_gtk.py

Apa yang dilakukan jendela ini

  • Latih 300 atau 2.000 langkah, atau berhenti di tengah jalan; pembelajaran berjalan dalam thread sehingga jendela tetap aktif.
  • Klik patch mana pun pada lukisan dan aplikasi akan memberi tahu kata-kata yang dimilikinya untuk patch tersebut.
  • Tanyakan dalam kata-kata — emas hangat, biru tua — dan aplikasi akan menyalakan patch tempat pertanyaan tersebut mendarat.
  • Berikan beberapa huruf dan aplikasi akan mencantumkan huruf yang diperkirakan berikutnya, beserta persentasenya.
  • Tempel tulisan Anda sendiri dan tekan Pelajari ini sebagai gantinya: huruf baru mendapatkan baris baru di tabel yang sama, tidak ada yang sudah diketahui yang dibuang.
  • Dua gambar di bawah lukisan: kedalaman yang diprediksi, dan satu ruang di mana titik adalah cat dan kotak adalah kata.
  • Simpan bobotnya ke net_weights.json dan muat kembali lain kali.

Cara menjalankannya

Satu folder, satu berkas, dan lukisan bernama painting.jpg jika Anda memilikinya. Di Linux, di folder tersebut:

  1. Instal paket Python python3 -m pip install jax numpy pillow
  2. Instal GTK4 dan binding Python-nya sudo apt install python3-gi gir1.2-gtk-4.0
  3. Buka jendela python3 net_gtk.py

Di Windows cara singkatnya adalah MSYS2: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4, lalu python -m pip install jax numpy pillow, lalu python net_gtk.py di terminal MSYS2 yang sama.

Di macOS: brew install pygobject3 gtk4, lalu python3 -m pip install jax numpy pillow, lalu python3 net_gtk.py.

Tidak ada tampilan? python3 net_gtk.py --selftest melatih di terminal dan mencetak angka yang sama.

Diukur dengan menjalankan file ini di terminal dengan JAX, pada lukisan dan thread ini: 400 langkah → 67% patch menemukan kata-katanya sendiri (kesalahan gambar 0,68), 2.000 langkah → 95% (0,53), 5.000 langkah → 97% (0,45). Kesalahan kedalaman berakhir pada 0,0003 dan kesalahan huruf turun dari 3,05 menjadi 2,90.

Browser tidak dapat menjalankan Python, jadi tab ini menampilkan berkas alih-alih jendela — jaringan yang sama berjalan secara langsung di atas. Kata-kata yang dipelajarinya adalah kata-kata yang dapat diajarkan oleh cat: lukisan ini tidak memiliki warna biru, jadi pertanyaan tentang biru akan mendarat di bercak emas. Bagian kepala huruf mengetahui urutan huruf, bukan makna.

Kompiler untuk Python dan JAX di atas

Kotak tersebut berisi forward pass dari satu jaringan. Kompiler membacanya, memeriksanya, dan menulisnya dua kali: Python untuk JAX, dan JavaScript yang berjalan di tab ini. Satu pohon, dua back end.

Token
—
Node dalam pohon
—
Fungsi
—
Python untuk JAX
JavaScript, dijalankan di sini

Apa yang dihitung

    Pemeriksaan membandingkan angka-angka ini dengan program yang sama yang dijalankan di numpy dan JAX pada bobot seeded yang sama — diukur sebelum kartu ini ada, bukan ditebak.

    Apa yang diizinkan oleh bahasa ini

    • def name(a, b): dengan badan yang menjorok, name = ..., dan return ...
    • Angka, nama, kurung, minus unary, dan + - * / @ untuk perkalian matriks.
    • .T untuk transpose, dan panggilan tanh, sqrt, exp, log, sum, mean, maximum.
    • Hal lainnya akan menghentikan kompiler dengan menunjukkan baris dan kolom daripada menebak.

    Ini adalah kompiler nyata untuk bahasa kecil, bukan runtime Python: tidak ada loop, tidak ada kelas, tidak ada impor. Forward pass dari satu jaringan muat di dalamnya, itulah sebabnya teks yang sama dapat menjadi JAX di mesin Anda dan JavaScript di tab ini.

    Mata virtual: ia hanya melihat piksel

    Mata yang diarahkan ke monitor: ia mendapatkan gambar dan tidak ada yang lain — tidak ada halaman, tidak ada data, tidak ada jaringan. Dari piksel-piksel itu saja ia menemukan tepi, sudut, dan bagaimana setiap titik bergeser saat mata melangkah ke samping, dan dari situ ia membangun kembali posisi segala sesuatu di dalam ruang.

    Apa yang dilihat mata sudut dalam biru, gerakan dalam oranye
    Tepi Gradien Sobel
    Gerakan Aliran Lucas–Kanade
    Ruangan yang dibangun kembali seret untuk memutar
    Frame yang terlihat
    0
    Sudut
    0
    Dilacak
    0
    Median gerakan
    —
    Kedalaman ditemukan
    —
    Titik-titik di ruang
    0
    Satu frame
    —

    Kedalamannya adalah geometri nyata, tetapi hanya sampai ukuran langkah mata, dan hanya di mana gambar memiliki tekstur — cat datar tidak memberikan apa pun untuk dipegang. Melihat di mana dinding berdiri bukanlah mengetahui bahwa itu adalah dinding, dan tidak ada yang di sini menciptakan dunia: ruangan di atas adalah piksel yang diukur.

    Ide Anda, dan apa yang masih dibutuhkannya

    • Mata pada monitor adalah antarmuka yang nyata: model yang membaca layar seperti cara manusia melakukannya tidak memerlukan plugin untuk setiap program — apa pun yang terlihat sudah menjadi input.
    • Dari dua frame mata yang bergerak Anda mendapatkan geometri, yang mana merupakan hal yang harus disetujui oleh model dunia; bagian itu dilakukan secara nyata oleh kartu ini.
    • Dunia yang dihasilkan secara real-time juga membutuhkan model yang menciptakan apa yang tidak dilihat siapa pun, menjaganya tetap konsisten saat Anda berputar, dan berjalan dalam hitungan milidetik — itu tidak ada di tab ini, dan sebuah halaman tidak dapat melatihnya.
    • Batasan jujurnya: mata ini memulihkan di mana benda berada, bukan apa artinya. Kecepatan melihat bukanlah pemahaman, dan yang satu jauh lebih mudah daripada yang lain.

    Gambar: pemindaian domain publik Perjamuan Terakhir karya Leonardo da Vinci, Wikimedia Commons.