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

Redes treinadas

Porque é que um cérebro pode incluir um .oann, a aritmética de inteiros, as camadas, como executar uma, 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.

Porque é que um cérebro pode usar uma

Uma rede é treinada noutro lado e incluída no pacote. O script chama-a quando quer uma decisão aprendida. É uma escolha do autor. O computador do próprio motor continua a ser a predefinição, e colocar num lugar um cérebro que traz pesos continua a ser opcional: um lugar de computador, na máquina que o corre.

.oann e aritmética de inteiros

Um ficheiro de rede é um .oann no formato 1. Um tipo de tensor é int8, int16 ou int32. Um expoente guardado vai de -48 a 16. As entradas e as 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 resumo criptográfico é verificado quando o pacote é empacotado, quando é instalado e de novo quando um lugar carrega o cérebro, antes de a sandbox abrir. Uma rede que levaria o lugar para lá de 64 MiB é recusada antes de ser alocada. O lugar do cérebro é retirado e o computador integrado fica com ele. O carregamento fica fora de todas as fases.

As camadas

Os tipos de camada, por esta ordem. As entradas e as 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.

Executar uma rede

brain.network(id) devolve o identificador. brain.tensor constrói um tensor imutável com 1 a 4 194 304 números. net:run recebe uma tabela com exatamente os nomes de entrada da rede e devolve uma tabela nova. Uma saída int16 é um tensor. Uma saída argmax é um número inteiro Lua. brain.grid constrói um tensor quadrado a partir de 1 a 10 destes nomes de camada, com o tamanho 8, 16, 32, 64 ou 128, sendo 64 a predefinição: sight, explored, water, height, metal, own, allies, enemies, threat e radar. O exemplo da norma grava uma amostra:

brain.record{
  features = { sectors = brain.grid({"own", "explored"}, 8) },
  decision = 0
}

features tem de 1 a 16 tensores. decision é um número inteiro ou um tensor. A chamada escreve uma amostra de treino quando a partida está a gravar, e verifica e cobra o mesmo quando não há nenhum ficheiro aberto. Uma opção pode deixar uma rede por usar: leia me.options e salte a chamada quando o jogador a desligar. A rede continua a ser carregada com o pacote.

Criar uma com oa-tool brain net

O oa-tool brain net lê um modelo ONNX com opset de 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 não ser que se defina --weights int16. --calibrate é um ficheiro de linhas JSON. O relatório indica a maior diferença em cada saída, ou a proporção de amostras em que um argmax coincide. --max-difference recusa uma diferença maior e não escreve nada. Liste o ficheiro em networks com o seu sha256. Os bytes têm de dar esse resumo criptográfico.

Os limites

Um ficheiro, uma execução e um registo ficam dentro destes tamanhos.

LimiteValor
O ficheiro .oannno máximo 64 MiB
Tensores num ficheiro2 a 4,096
Camadas num ficheiro1 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 de ficheirono máximo 16,777,216
Pesos de dense, conv2d e embedding, no totalno máximo 8,388,608 elementos
Operações que uma execução pode fazerno máximo 268,435,456
Memória das redes, à parte do limite do Lua64 MiB (67,108,864 bytes)
Números num brain.tensor1 a 4,194,304
brain.grid1 a 10 nomes de camada; tamanho 8, 16, 32, 64 ou 128. 64 é a predefinição
Um brain.record, e o ficheiro de registo1 a 16 tensores, no máximo 4,194,304 elementos. O ficheiro para em 1 GiB

O que um jogador vê

A Biblioteca assinala um cérebro que traz pesos com Rede e a linha Usa uma rede treinada ({size}). A entrada mostra também os níveis do cérebro, com o que funciona e se tem visão total. O computador integrado continua a aparecer em primeiro lugar e continua a ser a predefinição até um jogador escolher outro.