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

Una sola red

Una sola red para la pintura y todo el hilo

Una red real, construida aquí y entrenada aquí: los parches de la pintura, la profundidad que sugiere la pintura y cada letra de esta conversación, en un espacio compartido. Nada está preentrenado.

La pintura, fragmento por fragmento

La red observa la pintura en pequeños fragmentos, cada uno con su propia luz, color y ubicación, y aprende esas palabras. Los mismos pesos leen las letras del hilo.

La aplicación completa, en Python y JAX

Esta página y el programa a continuación son una sola red. El programa es la aplicación completa: una ventana GTK4, gradientes de JAX, la pintura, el hilo, la profundidad que predice y el espacio compartido. Cópialo o guárdalo, y luego ejecútalo en tu propia máquina.

Parches de pintura
—
Palabras que aprende
—
Letras que lee
—
Archivos que deben mantenerse juntos
net_gtk.py
net_gtk.py

Qué hace la ventana

  • Entrena 300 o 2 000 pasos, o detente a la mitad; el aprendizaje se ejecuta en un hilo para que la ventana permanezca activa.
  • Haz clic en cualquier parche de la pintura y te dirá las palabras que tiene para ese parche.
  • Pregúntale con palabras —oro cálido, azul oscuro— y iluminará los parches donde caiga la pregunta.
  • Dale algunas letras y enumerará las letras que espera a continuación, con porcentajes.
  • Pega tu propio escrito y presiona "Aprender esto en su lugar": las letras nuevas obtienen filas frescas en la misma tabla, nada de lo que ya sabía se desecha.
  • Dos dibujos debajo de la pintura: la profundidad que predice y el espacio donde los puntos son pintura y los cuadrados son palabras.
  • Guarda sus pesos en net_weights.json y cárgalos nuevamente la próxima vez.

Cómo ejecutarlo

Una carpeta, un archivo y una pintura llamada painting.jpg si tienes una. En Linux, en esa carpeta:

  1. Instalar paquetes de Python python3 -m pip install jax numpy pillow
  2. Instalar GTK4 y sus vinculaciones de Python sudo apt install python3-gi gir1.2-gtk-4.0
  3. Abrir la ventana python3 net_gtk.py

En Windows, la forma corta es MSYS2: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4, luego python -m pip install jax numpy pillow, y luego python net_gtk.py en esa misma terminal de MSYS2.

En macOS: brew install pygobject3 gtk4, luego python3 -m pip install jax numpy pillow, y luego python3 net_gtk.py.

¿Sin pantalla? python3 net_gtk.py --selftest entrena en la terminal e imprime los mismos números.

Medido ejecutando este archivo en una terminal con JAX, en esta pintura y este hilo: 400 pasos → 67 % de los parches encuentran sus propias palabras (error de imagen 0.68), 2 000 pasos → 95 % (0.53), 5 000 pasos → 97 % (0.45). El error de profundidad termina en 0.0003 y el error de letra cae de 3.05 a 2.90.

Un navegador no puede ejecutar Python, por lo que esta pestaña muestra el archivo en lugar de la ventana; la misma red se está ejecutando en vivo arriba. Las palabras que aprende son las que la pintura puede enseñar: esta pintura no tiene azul, por lo que una pregunta sobre el azul cae en parches dorados. El encabezado de letras conoce el orden de las letras, no el significado.

Un compilador para el Python y JAX de arriba

El cuadro contiene el paso forward de la red única. El compilador lo lee, lo verifica y lo escribe dos veces: Python para JAX y JavaScript que se ejecuta en esta pestaña. Un árbol, dos back ends.

Tokens
—
Nodos en el árbol
—
Funciones
—
Python para JAX
JavaScript, ejecutado aquí

Qué computa

    La verificación compara estos números con el mismo programa ejecutado en numpy y JAX con los mismos pesos semilla; medidos antes de que existiera esta tarjeta, no estimados.

    Lo que el lenguaje permite

    • def nombre(a, b): con un cuerpo indentado, nombre = ..., y return ...
    • Números, nombres, corchetes, signo menos unario, y + - * / @ para un producto de matrices.
    • .T para una transpuesta, y las llamadas tanh, sqrt, exp, log, sum, mean, maximum.
    • Cualquier otra cosa detiene el compilador indicando la línea y la columna en lugar de adivinar.

    Este es un compilador real para un lenguaje pequeño, no un entorno de ejecución de Python: sin bucles, sin clases, sin importaciones. El paso forward de la red única cabe dentro, razón por la cual el mismo texto puede convertirse en JAX en tu máquina y en JavaScript en esta pestaña.

    Ojos virtuales: solo ve píxeles

    Un ojo apuntando a un monitor: obtiene la imagen y nada más; ni página, ni datos, ni red. Solo a partir de esos píxeles encuentra bordes, esquinas y cómo se desliza cada punto mientras el ojo se desplaza lateralmente, y a partir de eso reconstruye dónde se encuentra todo en el espacio.

    Lo que el ojo ve esquinas en azul, movimiento en naranja
    Bordes Gradientes de Sobel
    Movimiento Flujo de Lucas-Kanade
    La habitación que reconstruyó arrastrar para girar
    Fotogramas vistos
    0
    Esquinas
    0
    Rastreado
    0
    Movimiento mediano
    —
    Profundidad encontrada
    —
    Puntos en el espacio
    0
    Un fotograma
    —

    La profundidad es geometría real, pero solo hasta el tamaño del paso del ojo, y solo donde la imagen tiene textura; la pintura plana no ofrece nada a lo que aferrarse. Ver dónde está una pared no es saber que es una pared, y nada aquí inventa un mundo: la habitación de arriba son los píxeles, medidos.

    Tu idea y lo que aún necesitaría

    • Los ojos en el monitor son una interfaz real: un modelo que lee la pantalla de la misma manera que una persona no necesita un complemento para cada programa; cualquier cosa visible ya es una entrada.
    • A partir de dos fotogramas de un ojo en movimiento se obtiene la geometría, que es exactamente con lo que un modelo de mundo debe coincidir; esta tarjeta hace esa parte de verdad.
    • Un mundo generado en tiempo real también necesita un modelo que invente lo que nadie vio, lo mantenga coherente mientras giras y se ejecute en milisegundos; eso no está en esta pestaña, y una página no puede entrenarlo.
    • El límite honesto: este ojo recupera dónde están las cosas, no qué significan. La velocidad de ver no es comprensión, y una es mucho más fácil que la otra.

    Imagen: escaneo de dominio público de La última cena de Leonardo da Vinci, Wikimedia Commons.