首页 › 模组制作 › 学习得来的网络
第 10 章

学习得来的网络

大脑为何可能随包带上一个 .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.grid1 到 10 个层名;尺寸 8、16、32、64 或 128。64 是默认
一次 brain.record,以及记录文件1 到 16 个张量,至多 4,194,304 个元素。文件停在 1 GiB

玩家看到什么

资料库给携带权重的大脑标上 网络,以及这一行 使用学习得来的网络({size})。条目还会显示大脑的级别、它适用于什么,以及它是否有全图视野。内置电脑玩家仍列在最前,并且在玩家另选之前仍是默认。