Reti apprese
Perché un cervello può includere un .oann, l'aritmetica intera, gli strati, eseguirne una, oa-tool brain net, i limiti e che cosa mostra la Libreria.
Questo capitolo riassume docs/brains/oabrain-standard.md, docs/brains/authoring.md e docs/playing-with-brains.md. Quei documenti sono il testo normativo.
Perché un cervello può usarne una
Una rete si addestra altrove e viaggia nel pacchetto. Lo script la chiama quando vuole una decisione appresa. È una scelta dell'autore. Il giocatore computer proprio del motore resta il predefinito, e mettere al posto un cervello che porta dei pesi resta una scelta: un posto computer sulla macchina che lo esegue.
.oann e aritmetica intera
Un file di rete è un .oann di formato 1. Un tipo di tensore è int8, int16 o int32. Un esponente memorizzato va da -48 a 16. Gli input e le attivazioni sono int16. Gli output sono int16, salvo un output argmax, che è int32. Gli stessi input danno gli stessi output su ogni macchina.
Il digest si controlla quando si impacchetta, quando si installa, e di nuovo quando un posto carica il cervello, prima che si apra la sandbox. Una rete che porterebbe il posto oltre 64 MiB viene rifiutata prima di essere allocata. Il posto viene rimosso e lo tiene il giocatore computer integrato. Il caricamento resta fuori da ogni fase.
Gli strati
I tipi di strato, in quest'ordine. Gli input e le attivazioni sono int16.
| Strato | Cosa fa |
|---|---|
dense | L'output è int16. |
conv2d | L'output è int16. |
maxpool | L'output è int16. |
relu | L'output è int16. |
leaky_relu | L'output è int16. |
tanh | L'output è int16. |
sigmoid | L'output è int16. |
add | L'output è int16. |
concat | L'output è int16. |
flatten | L'output è int16. |
softmax | L'output è int16. |
argmax | L'output è int32. |
embedding | L'output è int16. |
Eseguirne una
brain.network(id) restituisce l'handle. brain.tensor costruisce un tensore immutabile da 1 a 4.194.304 numeri. net:run prende una tabella con esattamente i nomi di input della rete e restituisce una tabella nuova. Un output int16 è un tensore. Un output argmax è un intero Lua. brain.grid costruisce un tensore quadrato da 1 a 10 di questi nomi di strato, di dimensione 8, 16, 32, 64 o 128, e 64 è il valore predefinito: sight, explored, water, height, metal, own, allies, enemies, threat e radar. L'esempio dello standard registra un campione:
brain.record{
features = { sectors = brain.grid({"own", "explored"}, 8) },
decision = 0
}
features va da 1 a 16 tensori. decision è un intero o un tensore. La chiamata scrive un campione di addestramento quando la partita sta registrando, e controlla e addebita lo stesso quando nessun file è aperto. Un'opzione può lasciare una rete inutilizzata: leggi me.options e salta la chiamata quando il giocatore la spegne. La rete viene caricata lo stesso con il pacchetto.
Farne una con oa-tool brain net
oa-tool brain net legge un modello ONNX di opset da 11 a 21 e scrive un .oann. Questo è il comando che stampa la guida:
oa-tool brain net MODEL.onnx --calibrate DATA [--out FILE] [--weights int8|int16] [--max-difference X] [--force] [--json]
I pesi sono int8, salvo che sia impostato --weights int16. --calibrate è un file di righe JSON. Il rapporto è la differenza più grande su ogni output, o la quota di campioni su cui un argmax concorda. --max-difference rifiuta una differenza più grande e non scrive nulla. Elenca il file sotto networks con il suo sha256. I byte devono dare quel digest.
I limiti
Un file, un'esecuzione e un record restano dentro queste dimensioni.
| Limite | Valore |
|---|---|
| Il file .oann | al massimo 64 MiB |
| Tensori in un file | da 2 a 4,096 |
| Strati in un file | da 1 a 1,024 |
| Il rango di un tensore, e una dimensione | rango da 1 a 4; una dimensione da 1 a 65,535 |
| Elementi in un tensore del file | al massimo 16,777,216 |
| pesi di dense, conv2d ed embedding insieme | al massimo 8,388,608 elementi |
| Operazioni che un'esecuzione può compiere | al massimo 268,435,456 |
| Memoria di rete, a parte il tetto Lua | 64 MiB (67,108,864 byte) |
| Numeri in un brain.tensor | da 1 a 4,194,304 |
| brain.grid | da 1 a 10 nomi di strato; dimensione 8, 16, 32, 64 o 128. 64 è il valore predefinito |
| Un brain.record, e il file di record | da 1 a 16 tensori, al massimo 4,194,304 elementi. Il file si ferma a 1 GiB |
Che cosa vede un giocatore
La Libreria etichetta un cervello che porta dei pesi con Rete e la riga Usa una rete appresa ({size}). La voce mostra anche i livelli del cervello, con che cosa funziona e se ha la vista completa. Il giocatore computer integrato resta elencato per primo, e resta il predefinito finché un giocatore non ne sceglie un altro.