Start › Modding-Infos › Gelernte Netze
Kapitel 10

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.

SchichtWirkung
denseDie Ausgabe ist int16.
conv2dDie Ausgabe ist int16.
maxpoolDie Ausgabe ist int16.
reluDie Ausgabe ist int16.
leaky_reluDie Ausgabe ist int16.
tanhDie Ausgabe ist int16.
sigmoidDie Ausgabe ist int16.
addDie Ausgabe ist int16.
concatDie Ausgabe ist int16.
flattenDie Ausgabe ist int16.
softmaxDie Ausgabe ist int16.
argmaxDie Ausgabe ist int32.
embeddingDie 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.

GrenzeWert
Die .oann-Dateihöchstens 64 MiB
Tensoren in einer Datei2 bis 4,096
Schichten in einer Datei1 bis 1,024
Der Rang eines Tensors und eine DimensionRang 1 bis 4; eine Dimension 1 bis 65,535
Elemente in einem Tensor der Dateihöchstens 16,777,216
Gewichte von dense, conv2d und embedding zusammenhöchstens 8,388,608 Elemente
Operationen, die ein Lauf ausführen darfhöchstens 268,435,456
Speicher des Netzes, getrennt von der Lua-Grenze64 MiB (67,108,864 Bytes)
Zahlen in einem brain.tensor1 bis 4,194,304
brain.grid1 bis 10 Schichtnamen; Größe 8, 16, 32, 64 oder 128. 64 ist der Standard
Ein brain.record und die Aufzeichnungsdatei1 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.