学习得来的网络
大脑为何可能随包带上一个 .oann、整数运算、各层、运行一份、oa-tool brain net、各项限制,以及资料库显示什么。
本章概述 docs/brains/oabrain-standard.md、docs/brains/authoring.md 和 docs/playing-with-brains.md。那些文档是规范性文本。
大脑为什么可能用一份
网络在别处训练,并放进包里。脚本想要一个学习得来的决定时调用它。这是作者的选择。引擎自己的电脑玩家仍然是默认,让携带权重的大脑入座仍然是自行开启的:运行它的那台机器上的一个电脑席位。
.oann 与整数运算
网络文件是 format-1 的 .oann。张量类型是 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 读取 opset 11 到 21 的 ONNX 模型,并写出一个 .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 拒绝更大的差值,并且什么也不写。把该文件连同它的 sha256 列在 networks 下。这些字节哈希后必须等于那个摘要值。
各项限制
一个文件、一次运行和一条记录都保持在这些大小之内。
| 限制 | 值 |
|---|---|
| .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})。条目还会显示大脑的级别、它适用于什么,以及它是否有全图视野。内置电脑玩家仍列在最前,并且在玩家另选之前仍是默认。