Redes aprendidas
Por qué un cerebro puede incluir un .oann, la aritmética entera, las capas, ejecutar una, oa-tool brain net, los límites y qué muestra la Biblioteca.
Este capítulo resume docs/brains/oabrain-standard.md, docs/brains/authoring.md y docs/playing-with-brains.md. Esos documentos son el texto normativo.
Por qué un cerebro puede usar una
Una red se entrena en otro sitio y se incluye en el paquete. El script la llama cuando quiere una decisión aprendida. Es elección del autor. El jugador de ordenador del propio motor sigue por defecto, y sentar un cerebro que lleva pesos sigue siendo optativo: un asiento de ordenador en la máquina que lo ejecuta.
.oann y aritmética entera
Un archivo de red es un .oann de formato 1. Un tipo de tensor es int8, int16 o int32. Un exponente guardado va de -48 a 16. Las entradas y las activaciones son int16. Las salidas son int16, salvo una salida argmax, que es int32. Las mismas entradas dan las mismas salidas en cada máquina.
La huella se comprueba al empaquetar, al instalar y otra vez cuando un asiento carga el cerebro, antes de que se abra el aislamiento. Una red que llevaría al asiento por encima de 64 MiB se rechaza antes de reservarla. Se retira el asiento y lo conserva el jugador de ordenador integrado. La carga queda fuera de todas las fases.
Las capas
Los tipos de capa, en este orden. Las entradas y las activaciones son int16.
| Capa | Qué hace |
|---|---|
dense | La salida es int16. |
conv2d | La salida es int16. |
maxpool | La salida es int16. |
relu | La salida es int16. |
leaky_relu | La salida es int16. |
tanh | La salida es int16. |
sigmoid | La salida es int16. |
add | La salida es int16. |
concat | La salida es int16. |
flatten | La salida es int16. |
softmax | La salida es int16. |
argmax | La salida es int32. |
embedding | La salida es int16. |
Ejecutar una
brain.network(id) devuelve el manejador. brain.tensor construye un tensor inmutable de 1 a 4.194.304 números. net:run toma una tabla con exactamente los nombres de entrada de la red y devuelve una tabla nueva. Una salida int16 es un tensor. Una salida argmax es un entero de Lua. brain.grid construye un tensor cuadrado de 1 a 10 de estos nombres de capa, con tamaño 8, 16, 32, 64 o 128, y 64 es el valor por defecto: sight, explored, water, height, metal, own, allies, enemies, threat y radar. El ejemplo del estándar registra una muestra:
brain.record{
features = { sectors = brain.grid({"own", "explored"}, 8) },
decision = 0
}
features va de 1 a 16 tensores. decision es un entero o un tensor. La llamada escribe una muestra de entrenamiento cuando la partida está grabando, y hace la misma comprobación y el mismo cargo cuando no hay ningún archivo abierto. Una opción puede dejar una red sin usar: lee me.options y salta la llamada cuando el jugador la desactiva. La red se carga igual con el paquete.
Hacer una con oa-tool brain net
oa-tool brain net lee un modelo ONNX de opset 11 a 21 y escribe un .oann. Este es el comando que imprime la guía:
oa-tool brain net MODEL.onnx --calibrate DATA [--out FILE] [--weights int8|int16] [--max-difference X] [--force] [--json]
Los pesos son int8 salvo que se ponga --weights int16. --calibrate es un archivo de líneas JSON. El informe es la mayor diferencia de cada salida, o la proporción de muestras en las que coincide un argmax. --max-difference rechaza una diferencia mayor y no escribe nada. Lista el archivo bajo networks con su sha256. Los bytes tienen que dar esa huella.
Los límites
Un archivo, una ejecución y un registro se quedan dentro de estos tamaños.
| Límite | Valor |
|---|---|
| El archivo .oann | como mucho 64 MiB |
| Tensores en un archivo | de 2 a 4,096 |
| Capas en un archivo | de 1 a 1,024 |
| El rango de un tensor, y una dimensión | rango de 1 a 4; una dimensión de 1 a 65,535 |
| Elementos en un tensor del archivo | como mucho 16,777,216 |
| pesos de dense, conv2d y embedding juntos | como mucho 8,388,608 elementos |
| Operaciones que puede hacer una ejecución | como mucho 268,435,456 |
| Memoria de red, aparte del tope de Lua | 64 MiB (67,108,864 bytes) |
| Números en un brain.tensor | de 1 a 4,194,304 |
| brain.grid | de 1 a 10 nombres de capa; tamaño 8, 16, 32, 64 o 128. 64 es el valor por defecto |
| Un brain.record, y el archivo de record | de 1 a 16 tensores, como mucho 4,194,304 elementos. El archivo se detiene en 1 GiB |
Qué ve un jugador
La Biblioteca etiqueta un cerebro que lleva pesos con Red y la línea Usa una red aprendida ({size}). La entrada también muestra los niveles del cerebro, con qué funciona y si tiene visión total. El jugador de ordenador integrado sigue listado el primero, y sigue por defecto hasta que un jugador elige otro.