Головна › Моддинг › Навчені мережі
Розділ 10

Навчені мережі

Навіщо мозку постачати .oann, цілочисельна арифметика, шари, запуск мережі, oa-tool brain net, обмеження і що показує Бібліотека.

Цей розділ стисло викладає docs/brains/oabrain-standard.md, docs/brains/authoring.md і docs/playing-with-brains.md. Нормативний текст — саме ці документи.

Навіщо мозку мережа

Мережу навчають деінде й постачають у пакеті. Скрипт викликає її, коли йому потрібне навчене рішення. Це вибір автора. Власний компʼютерний гравець рушія лишається типовим, а мозок із вагами потрапляє на місце лише за вибором гравця — одне місце компʼютера на машині, яка його виконує.

.oann і цілочисельна арифметика

Файл мережі — .oann формату 1. Тип тензора — int8, int16 або int32. Збережений показник степеня — від -48 до 16. Входи й активації — int16. Виходи — int16, крім виходу argmax, який має тип int32. Ті самі входи дають ті самі виходи на кожній машині.

Дайджест перевіряється під час пакування, під час установлення й ще раз, коли місце завантажує мозок, перш ніж відкриється пісочниця. Мережа, через яку місце перевищило б 64 MiB, відхиляється ще до виділення памʼяті. Мозок знімається з місця, і місце лишається за вбудованим компʼютерним гравцем. Завантаження відбувається поза будь-якою фазою.

Шари

Типи шарів, у такому порядку. Входи й активації — int16.

ШарЩо робить
denseВихід — int16.
conv2dВихід — int16.
maxpoolВихід — int16.
reluВихід — int16.
leaky_reluВихід — int16.
tanhВихід — int16.
sigmoidВихід — int16.
addВихід — int16.
concatВихід — int16.
flattenВихід — int16.
softmaxВихід — int16.
argmaxВихід — int32.
embeddingВихід — int16.

Запуск мережі

brain.network(id) повертає дескриптор. brain.tensor будує незмінний тензор із від 1 до 4 194 304 чисел. net:run приймає таблицю рівно з тими назвами входів, які має мережа, і повертає нову таблицю. Вихід int16 — це тензор. Вихід argmax — ціле число Lua. brain.grid будує квадратний тензор із від 1 до 10 таких назв шарів розміром 8, 16, 32, 64 або 128 (за замовчуванням 64): sight, explored, water, height, metal, own, allies, enemies, threat і radar. Приклад зі стандарту записує один зразок:

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

features — від 1 до 16 тензорів. decision — ціле число або тензор. Виклик записує навчальний зразок, коли матч записується, а коли жоден файл не відкрито, так само перевіряє й списує бюджет. Параметр може лишити мережу невикористаною: читай me.options і пропускай виклик, коли гравець її вимикає. Мережа однаково завантажується разом із пакетом.

Створення мережі за допомогою oa-tool brain net

oa-tool brain net читає модель ONNX з opset від 11 до 21 і записує .oann. Ось команда, яку наводить посібник:

oa-tool brain net MODEL.onnx --calibrate DATA [--out FILE] [--weights int8|int16] [--max-difference X] [--force] [--json]

Ваги — int8, якщо не задано --weights int16. --calibrate — файл рядків JSON. Звіт — найбільша різниця на кожному виході або частка зразків, на яких збігається argmax. --max-difference відхиляє більшу різницю й нічого не записує. Укажи файл у networks із його sha256. Байти мають давати саме цей дайджест.

Обмеження

Файл, запуск і запис не виходять за ці розміри.

ОбмеженняЗначення
Файл .oannщонайбільше 64 MiB
Тензорів в одному файлівід 2 до 4,096
Шарів в одному файлівід 1 до 1,024
Ранг тензора й один вимірранг від 1 до 4; вимір від 1 до 65,535
Елементів в одному тензорі файлущонайбільше 16,777,216
ваги dense, conv2d і embedding разомщонайбільше 8,388,608 елементів
Операцій за один запускщонайбільше 268,435,456
Памʼять мережі, окремо від обмеження Lua64 MiB (67,108,864 байтів)
Чисел в одному brain.tensorвід 1 до 4,194,304
brain.gridвід 1 до 10 назв шарів; розмір 8, 16, 32, 64 або 128. За замовчуванням 64
Один brain.record і файл записувід 1 до 16 тензорів, щонайбільше 4,194,304 елементів. Файл обривається на 1 GiB

Що бачить гравець

Бібліотека позначає мозок із вагами міткою Мережа і рядком Використовує навчену мережу ({size}). Запис також показує рівні мозку, з чим він працює і чи має він повну видимість. Вбудований компʼютерний гравець і далі стоїть у списку першим і лишається типовим, доки гравець не обере інший.