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.
| 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. |
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.
| Limite | Valor |
|---|---|
| O ficheiro .oann | no máximo 64 MiB |
| Tensores num ficheiro | 2 a 4,096 |
| Camadas num ficheiro | 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 de ficheiro | no máximo 16,777,216 |
| Pesos de dense, conv2d e embedding, no total | 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, à parte do limite do Lua | 64 MiB (67,108,864 bytes) |
| Números num brain.tensor | 1 a 4,194,304 |
| brain.grid | 1 a 10 nomes de camada; tamanho 8, 16, 32, 64 ou 128. 64 é a predefinição |
| Um brain.record, e o ficheiro de registo | 1 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.