Inicio › Info de modding › Redes aprendidas
Capítulo 10

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.

CapaQué hace
denseLa salida es int16.
conv2dLa salida es int16.
maxpoolLa salida es int16.
reluLa salida es int16.
leaky_reluLa salida es int16.
tanhLa salida es int16.
sigmoidLa salida es int16.
addLa salida es int16.
concatLa salida es int16.
flattenLa salida es int16.
softmaxLa salida es int16.
argmaxLa salida es int32.
embeddingLa 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ímiteValor
El archivo .oanncomo mucho 64 MiB
Tensores en un archivode 2 a 4,096
Capas en un archivode 1 a 1,024
El rango de un tensor, y una dimensiónrango de 1 a 4; una dimensión de 1 a 65,535
Elementos en un tensor del archivocomo mucho 16,777,216
pesos de dense, conv2d y embedding juntoscomo mucho 8,388,608 elementos
Operaciones que puede hacer una ejecucióncomo mucho 268,435,456
Memoria de red, aparte del tope de Lua64 MiB (67,108,864 bytes)
Números en un brain.tensorde 1 a 4,194,304
brain.gridde 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 recordde 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.