Обученные сети
Зачем мозгу поставлять .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 МиБ, отклоняется до выделения памяти. Место удаляется, и за него продолжает играть встроенный компьютерный игрок. Загрузка не входит ни в одну фазу.
Слои
Виды слоёв в таком порядке. Входы и активации — 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 МиБ |
| Тензоров в одном файле | от 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 МиБ (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 ГиБ |
Что видит игрок
Библиотека помечает мозг с весами меткой Сеть и строкой Использует обученную сеть ({size}). В записи также указаны уровни мозга, с чем он работает и есть ли у него полный обзор. Встроенный компьютерный игрок по-прежнему стоит в списке первым и остаётся игроком по умолчанию, пока игрок не выберет другой.