Redes treinadas
Por que um cérebro levaria um .oann, aritmética de inteiros, as camadas, como executar uma rede, oa-tool brain net, os limites e o que a Biblioteca mostra.
Este capítulo resume docs/brains/oabrain-standard.md, docs/brains/authoring.md e docs/playing-with-brains.md. Esses documentos são o texto normativo.
Por que um cérebro usaria uma
Uma rede é treinada em outro lugar e distribuída no pacote. O script a chama quando quer uma decisão aprendida. É uma escolha do autor. O computador do próprio motor continua sendo o padrão, e pôr num lugar um cérebro que leva pesos continua sendo opcional: um lugar de computador, na máquina que o roda.
.oann e aritmética de inteiros
Um arquivo de rede é um .oann de formato 1. Um tipo de tensor é int8, int16 ou int32. Um expoente armazenado vai de -48 a 16. Entradas e ativações são int16. As saídas são int16, exceto uma saída argmax, que é int32. As mesmas entradas dão as mesmas saídas em todas as máquinas.
O hash é verificado quando o pacote é empacotado, quando é instalado e de novo quando um lugar carrega o cérebro, antes de o sandbox abrir. Uma rede que levaria o lugar além de 64 MiB é recusada antes de ser alocada. O cérebro é tirado do lugar, e o computador integrado fica com ele. O carregamento fica fora de todas as fases.
As camadas
Os tipos de camada, nesta ordem. Entradas e ativações são int16.
| Camada | O que faz |
|---|---|
dense | A saída é int16. |
conv2d | A saída é int16. |
maxpool | A saída é int16. |
relu | A saída é int16. |
leaky_relu | A saída é int16. |
tanh | A saída é int16. |
sigmoid | A saída é int16. |
add | A saída é int16. |
concat | A saída é int16. |
flatten | A saída é int16. |
softmax | A saída é int16. |
argmax | A saída é int32. |
embedding | A saída é int16. |
Como executar uma
brain.network(id) retorna o handle. brain.tensor monta um tensor imutável de 1 a 4.194.304 números. net:run recebe uma tabela com exatamente os nomes de entrada da rede e retorna uma nova tabela. Uma saída int16 é um tensor. Uma saída argmax é um inteiro Lua. brain.grid monta um tensor quadrado de 1 a 10 destes nomes de camada, no tamanho 8, 16, 32, 64 ou 128, sendo 64 o padrão: sight, explored, water, height, metal, own, allies, enemies, threat e radar. O exemplo do padrão grava uma amostra:
brain.record{
features = { sectors = brain.grid({"own", "explored"}, 8) },
decision = 0
}
features tem de 1 a 16 tensores. decision é um inteiro ou um tensor. A chamada escreve uma amostra de treino quando a partida está gravando, e faz as mesmas verificações e cobranças quando nenhum arquivo está aberto. Uma opção pode deixar uma rede sem uso: leia me.options e pule a chamada quando o jogador a desligar. A rede continua sendo carregada com o pacote.
Como criar uma com oa-tool brain net
oa-tool brain net lê um modelo ONNX de opset 11 a 21 e escreve um .oann. Este é o comando que o guia mostra:
oa-tool brain net MODEL.onnx --calibrate DATA [--out FILE] [--weights int8|int16] [--max-difference X] [--force] [--json]
Os pesos são int8, a menos que --weights int16 seja definido. --calibrate é um arquivo de linhas JSON. O relatório é a maior diferença em cada saída, ou a fração de amostras em que um argmax concorda. --max-difference recusa uma diferença maior e não escreve nada. Liste o arquivo em networks com seu sha256. Os bytes precisam ter exatamente esse hash.
Os limites
Um arquivo, uma execução e um registro ficam dentro destes tamanhos.
| Limite | Valor |
|---|---|
| O arquivo .oann | no máximo 64 MiB |
| Tensores num arquivo | de 2 a 4,096 |
| Camadas num arquivo | de 1 a 1,024 |
| A ordem de um tensor, e uma dimensão | ordem de 1 a 4; uma dimensão de 1 a 65,535 |
| Elementos num tensor do arquivo | no máximo 16,777,216 |
| pesos de dense, conv2d e embedding somados | no máximo 8,388,608 elementos |
| Operações que uma execução pode fazer | no máximo 268,435,456 |
| Memória das redes, separada do teto do Lua | 64 MiB (67,108,864 bytes) |
| Números num brain.tensor | de 1 a 4,194,304 |
| brain.grid | de 1 a 10 nomes de camada; tamanho 8, 16, 32, 64 ou 128. 64 é o padrão |
| Um brain.record, e o arquivo de registro | de 1 a 16 tensores, no máximo 4,194,304 elementos. O arquivo para em 1 GiB |
O que um jogador vê
A Biblioteca marca um cérebro que leva pesos com Rede e a linha Usa uma rede treinada ({size}). A entrada também mostra os níveis do cérebro, com o que ele funciona e se ele tem visão total. O computador integrado continua listado primeiro, e continua sendo o padrão até que um jogador escolha outro.