Gelernte Netze
Warum ein Gehirn ein .oann mitliefern kann, Ganzzahlarithmetik, die Schichten, eines ausführen, oa-tool brain net, die Grenzen und was die Bibliothek zeigt.
Dieses Kapitel fasst docs/brains/oabrain-standard.md, docs/brains/authoring.md und docs/playing-with-brains.md zusammen. Diese Dokumente sind der maßgebliche Text.
Warum ein Gehirn eines nutzen kann
Ein Netz wird anderswo trainiert und im Paket mitgeliefert. Das Skript ruft es auf, wenn es eine gelernte Entscheidung will. Es ist die Wahl des Autors. Der eigene Computerspieler der Engine bleibt der Standard, und ein Gehirn mit Gewichten einzusetzen bleibt freiwillig, ein Computersitz auf der Maschine, die es ausführt.
.oann und Ganzzahlarithmetik
Eine Netzdatei ist ein .oann im Format 1. Ein Tensortyp ist int8, int16 oder int32. Ein gespeicherter Exponent ist -48 bis 16. Eingaben und Aktivierungen sind int16. Ausgaben sind int16, außer einer argmax-Ausgabe, die int32 ist. Dieselben Eingaben geben auf jeder Maschine dieselben Ausgaben.
Der Digest wird geprüft, wenn das Paket gepackt wird, wenn es installiert wird, und noch einmal, wenn ein Sitz das Gehirn lädt, bevor die Sandbox geöffnet wird. Ein Netz, das den Sitz über 64 MiB bringen würde, wird abgelehnt, bevor es zugeteilt wird. Der Sitz wird entfernt, und der eingebaute Computerspieler behält ihn. Das Laden liegt außerhalb jeder Phase.
Die Schichten
Die Schichtarten, in dieser Reihenfolge. Eingaben und Aktivierungen sind int16.
| Schicht | Wirkung |
|---|---|
dense | Die Ausgabe ist int16. |
conv2d | Die Ausgabe ist int16. |
maxpool | Die Ausgabe ist int16. |
relu | Die Ausgabe ist int16. |
leaky_relu | Die Ausgabe ist int16. |
tanh | Die Ausgabe ist int16. |
sigmoid | Die Ausgabe ist int16. |
add | Die Ausgabe ist int16. |
concat | Die Ausgabe ist int16. |
flatten | Die Ausgabe ist int16. |
softmax | Die Ausgabe ist int16. |
argmax | Die Ausgabe ist int32. |
embedding | Die Ausgabe ist int16. |
Eines ausführen
brain.network(id) gibt das Handle zurück. brain.tensor baut einen unveränderlichen Tensor aus 1 bis 4.194.304 Zahlen. net:run nimmt eine Tabelle mit genau den Eingabenamen des Netzes und gibt eine neue Tabelle zurück. Eine int16-Ausgabe ist ein Tensor. Eine argmax-Ausgabe ist eine Lua-Ganzzahl. brain.grid baut einen quadratischen Tensor aus 1 bis 10 dieser Schichtnamen, in der Größe 8, 16, 32, 64 oder 128, und 64 ist der Standard: sight, explored, water, height, metal, own, allies, enemies, threat und radar. Das Beispiel des Standards zeichnet eine Probe auf:
brain.record{
features = { sectors = brain.grid({"own", "explored"}, 8) },
decision = 0
}
features sind 1 bis 16 Tensoren. decision ist eine Ganzzahl oder ein Tensor. Der Aufruf schreibt eine Trainingsprobe, wenn das Match aufzeichnet, und er prüft und belastet genauso, wenn keine Datei offen ist. Eine Option kann ein Netz ungenutzt lassen: lies me.options und überspringe den Aufruf, wenn der Spieler es ausschaltet. Das Netz wird trotzdem mit dem Paket geladen.
Eines mit oa-tool brain net machen
oa-tool brain net liest ein ONNX-Modell mit Opset 11 bis 21 und schreibt ein .oann. Das ist der Befehl, den die Anleitung druckt:
oa-tool brain net MODEL.onnx --calibrate DATA [--out FILE] [--weights int8|int16] [--max-difference X] [--force] [--json]
Gewichte sind int8, außer --weights int16 ist gesetzt. --calibrate ist eine Datei aus JSON-Zeilen. Der Bericht ist der größte Unterschied an jeder Ausgabe, oder der Anteil der Proben, bei denen ein argmax übereinstimmt. --max-difference lehnt einen größeren Unterschied ab und schreibt nichts. Liste die Datei unter networks mit ihrem sha256. Die Bytes müssen diesen Digest ergeben.
Die Grenzen
Eine Datei, ein Lauf und eine Aufzeichnung bleiben in diesen Größen.
| Grenze | Wert |
|---|---|
| Die .oann-Datei | höchstens 64 MiB |
| Tensoren in einer Datei | 2 bis 4,096 |
| Schichten in einer Datei | 1 bis 1,024 |
| Der Rang eines Tensors und eine Dimension | Rang 1 bis 4; eine Dimension 1 bis 65,535 |
| Elemente in einem Tensor der Datei | höchstens 16,777,216 |
| Gewichte von dense, conv2d und embedding zusammen | höchstens 8,388,608 Elemente |
| Operationen, die ein Lauf ausführen darf | höchstens 268,435,456 |
| Speicher des Netzes, getrennt von der Lua-Grenze | 64 MiB (67,108,864 Bytes) |
| Zahlen in einem brain.tensor | 1 bis 4,194,304 |
| brain.grid | 1 bis 10 Schichtnamen; Größe 8, 16, 32, 64 oder 128. 64 ist der Standard |
| Ein brain.record und die Aufzeichnungsdatei | 1 bis 16 Tensoren, höchstens 4,194,304 Elemente. Die Datei stoppt bei 1 GiB |
Was ein Spieler sieht
Die Bibliothek kennzeichnet ein Gehirn, das Gewichte trägt, mit Netzwerk und der Zeile Nutzt ein gelerntes Netz ({size}). Der Eintrag zeigt auch die Stufen des Gehirns, womit es läuft, und ob es volle Sicht hat. Der eingebaute Computerspieler bleibt zuerst gelistet, und er bleibt der Standard, bis ein Spieler einen anderen wählt.