Início › Info de modding › Redes treinadas
Capítulo 10

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.

CamadaO que faz
denseA saída é int16.
conv2dA saída é int16.
maxpoolA saída é int16.
reluA saída é int16.
leaky_reluA saída é int16.
tanhA saída é int16.
sigmoidA saída é int16.
addA saída é int16.
concatA saída é int16.
flattenA saída é int16.
softmaxA saída é int16.
argmaxA saída é int32.
embeddingA 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.

LimiteValor
O arquivo .oannno máximo 64 MiB
Tensores num arquivode 2 a 4,096
Camadas num arquivode 1 a 1,024
A ordem de um tensor, e uma dimensãoordem de 1 a 4; uma dimensão de 1 a 65,535
Elementos num tensor do arquivono máximo 16,777,216
pesos de dense, conv2d e embedding somadosno máximo 8,388,608 elementos
Operações que uma execução pode fazerno máximo 268,435,456
Memória das redes, separada do teto do Lua64 MiB (67,108,864 bytes)
Números num brain.tensorde 1 a 4,194,304
brain.gridde 1 a 10 nomes de camada; tamanho 8, 16, 32, 64 ou 128. 64 é o padrão
Um brain.record, e o arquivo de registrode 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.