Навчені мережі
Навіщо мозку постачати .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 |
| Памʼять мережі, окремо від обмеження Lua | 64 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}). Запис також показує рівні мозку, з чим він працює і чи має він повну видимість. Вбудований компʼютерний гравець і далі стоїть у списку першим і лишається типовим, доки гравець не обере інший.