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

Một mạng lưới

Một mạng lưới cho bức tranh và toàn bộ luồng hội thoại

Một mạng lưới thực sự, được xây dựng tại đây và huấn luyện tại đây: các mảng của bức tranh, độ sâu mà lớp sơn gợi ra và từng chữ cái của cuộc hội thoại này, trong một không gian chung. Không có gì là được huấn luyện trước.

Bức tranh, theo từng vùng

Mạng nhìn vào bức tranh theo các vùng nhỏ, mỗi vùng có ánh sáng, màu sắc và vị trí riêng, và học những từ đó. Cùng các trọng số này sẽ đọc các chữ cái của luồng dữ liệu.

Toàn bộ ứng dụng, viết bằng Python và JAX

Trang này và chương trình dưới đây là một mạng lưới. Chương trình là toàn bộ ứng dụng: một cửa sổ GTK4, gradient JAX, bức tranh, luồng, độ sâu mà nó dự đoán và không gian chia sẻ. Hãy sao chép hoặc lưu lại, sau đó chạy trên máy của bạn.

Các mảng màu sơn
—
Những từ mà nó học được
—
Các chữ cái mà nó đọc
—
Các tệp cần giữ cùng nhau
net_gtk.py
net_gtk.py

Chức năng của cửa sổ

  • Huấn luyện 300 hoặc 2.000 bước, hoặc dừng lại giữa chừng; quá trình học chạy trong một luồng nên cửa sổ vẫn hoạt động.
  • Nhấp vào bất kỳ mảnh nào của bức tranh và nó sẽ cho bạn biết các từ mà nó có cho mảnh đó.
  • Hỏi bằng từ ngữ — vàng ấm, xanh đậm — và nó sẽ thắp sáng các mảnh mà câu hỏi hướng tới.
  • Nhập một vài chữ cái và nó sẽ liệt kê các chữ cái mà nó dự đoán tiếp theo, kèm theo tỷ lệ phần trăm.
  • Dán bài viết của bạn và nhấn 'Learn this instead': các chữ cái mới sẽ có hàng mới trong cùng một bảng, không có gì nó đã biết bị xóa bỏ.
  • Hai bản vẽ dưới bức tranh: độ sâu mà nó dự đoán, và một không gian nơi các dấu chấm là sơn và các ô vuông là từ ngữ.
  • Lưu trọng số của nó vào net_weights.json và tải lại chúng vào lần tới.

Cách chạy chương trình

Một thư mục, một tệp, và một bức tranh tên là painting.jpg nếu bạn có. Trên Linux, trong thư mục đó:

  1. Cài đặt các gói Python python3 -m pip install jax numpy pillow
  2. Cài đặt GTK4 và các ràng buộc Python của nó sudo apt install python3-gi gir1.2-gtk-4.0
  3. Mở cửa sổ python3 net_gtk.py

Trên Windows, cách ngắn nhất là dùng MSYS2: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4, sau đó python -m pip install jax numpy pillow, rồi chạy python net_gtk.py trong chính terminal MSYS2 đó.

Trên macOS: brew install pygobject3 gtk4, sau đó python3 -m pip install jax numpy pillow, rồi chạy python3 net_gtk.py.

Không có màn hình? python3 net_gtk.py --selftest sẽ huấn luyện trong terminal và in ra các con số tương tự.

Được đo bằng cách chạy tệp này trong terminal với JAX, trên bức tranh này và luồng này: 400 bước → 67% các mảnh tìm thấy từ của chính chúng (sai số hình ảnh 0.68), 2.000 bước → 95% (0.53), 5.000 bước → 97% (0.45). Sai số độ sâu kết thúc ở mức 0.0003 và sai số chữ cái giảm từ 3.05 xuống 2.90.

Trình duyệt không thể chạy Python, vì vậy tab này hiển thị tệp thay vì cửa sổ — mạng lưới tương tự đang chạy trực tiếp ở trên. Những từ mà nó học được là những từ mà bức tranh có thể dạy: bức tranh này không có màu xanh lam, vì vậy một câu hỏi về màu xanh lam sẽ rơi vào các mảng màu vàng. Phần đầu chữ cái biết thứ tự của các chữ cái, không phải ý nghĩa.

Trình biên dịch cho Python và JAX ở trên

Hộp chứa lượt truyền tiến của một mạng. Trình biên dịch đọc, kiểm tra và ghi ra hai lần: Python cho JAX và JavaScript chạy trong tab này. Một cây, hai back-end.

Token
—
Các nút trong cây
—
Hàm
—
Python cho JAX
JavaScript, chạy tại đây

Kết quả tính toán

    Việc kiểm tra so sánh các con số này với cùng một chương trình được chạy trong numpy và JAX trên cùng các trọng số đã được gieo hạt — được đo trước khi thẻ này tồn tại, không phải dự đoán.

    Ngôn ngữ cho phép những gì

    • def name(a, b): với thân hàm thụt lề, name = ..., và return ...
    • Số, tên, dấu ngoặc, dấu trừ đơn nhất, và + - * / @ cho tích ma trận.
    • .T để chuyển vị, và các lệnh gọi tanh, sqrt, exp, log, sum, mean, maximum.
    • Bất kỳ điều gì khác sẽ khiến trình biên dịch dừng lại tại dòng và cột đó thay vì phỏng đoán.

    Đây là một trình biên dịch thực sự cho một ngôn ngữ nhỏ, không phải là môi trường thực thi Python: không vòng lặp, không lớp, không nhập (import). Lượt truyền tiến của một mạng nằm gọn trong đó, đó là lý do tại sao cùng một văn bản có thể trở thành JAX trên máy của bạn và JavaScript trong tab này.

    Mắt ảo: nó chỉ nhìn thấy các điểm ảnh

    Một con mắt hướng vào màn hình: nó nhận được hình ảnh và không gì khác — không trang web, không dữ liệu, không mạng. Chỉ từ những điểm ảnh đó, nó tìm ra các cạnh, các góc và cách mỗi điểm trượt đi khi con mắt di chuyển sang bên, và từ đó nó tái xây dựng vị trí của mọi thứ trong không gian.

    Những gì con mắt nhìn thấy các góc màu xanh lam, chuyển động màu cam
    Các cạnh Gradient Sobel
    Chuyển động Luồng Lucas–Kanade
    Căn phòng đã được tái xây dựng kéo để xoay
    Số khung hình đã thấy
    0
    Các góc
    0
    Đã theo dõi
    0
    Chuyển động trung vị
    —
    Độ sâu tìm thấy
    —
    Các điểm trong không gian
    0
    Một khung hình
    —

    Độ sâu là hình học thực, nhưng chỉ giới hạn trong kích thước bước di chuyển của mắt, và chỉ ở nơi hình ảnh có kết cấu — những mảng màu phẳng không cung cấp điểm tựa nào. Nhìn thấy nơi một bức tường đứng không có nghĩa là biết đó là một bức tường, và không có gì ở đây tự sáng tạo ra một thế giới: căn phòng phía trên chính là các điểm ảnh đã được đo đạc.

    Ý tưởng của bạn, và những gì nó vẫn còn cần

    • Mắt nhìn vào màn hình là một giao diện thực thụ: một mô hình đọc màn hình theo cách con người làm thì không cần plugin cho mỗi chương trình — bất cứ thứ gì hiển thị đều đã là đầu vào.
    • Từ hai khung hình của một con mắt đang di chuyển, bạn có được hình học, điều mà một mô hình thế giới phải khớp theo; phần này thẻ này thực hiện một cách thực tế.
    • Một thế giới được tạo ra trong thời gian thực cũng cần một mô hình tự sáng tạo ra những gì không ai thấy, giữ cho nó nhất quán khi bạn quay người, và chạy trong vài mili giây — điều đó không có trong tab này, và một trang web không thể huấn luyện nó.
    • Giới hạn thực tế: con mắt này khôi phục vị trí của mọi thứ, chứ không phải ý nghĩa của chúng. Tốc độ nhìn không phải là sự thấu hiểu, và điều này dễ hơn điều kia nhiều.

    Hình ảnh: bản quét công cộng bức Bữa tối cuối cùng của Leonardo da Vinci, Wikimedia Commons.