Это файл весов, который сохраняется в формате, используемом Dar knet framework ( исходный код ). Насколько я могу судить, этот формат формально не указан нигде, кроме реального кода платформы. Соответствующие части находятся в файле src/parser.c
, функции save_weights_upto
и load_weights_upto
. Как вы, вероятно, можете сказать, этот фрагмент кода Python, кажется, является прямым переводом соответствующего кода C.
Казалось бы, формат файла начинается с трех 32-битных целых чисел (хотя В коде C используется sizeof(int)
, который не обязательно является 32-битным, но каким бы то ни было), соответствующим основным, второстепенным и ревизионным значениям версии формата файла. Затем следует атрибут seen
для сети, который в зависимости от версии файла может быть int
или size_t
, что обычно означает 32 или 64 бита. Тогда transpose
- это логическое значение, зависящее от того, являются ли старшая и младшая версии больше 1000. Использование полей major, minor и revision, по меньшей мере, неортодоксально.
В Python код, ни seen
, ни transpose
не используются. transpose
считывается в переменную, но эта переменная не используется. Теоретически так и должно быть. Я предполагаю, что код работает для файла, на который есть ссылка в посте, но если transpose
оказалось правдой, загрузка весов должна быть другой, как вы можете видеть в load_connected_weights
.
В любом случае, все это очень специфические c проблемы, связанные с форматом файла Dar knet, использованным в этом примере. Если вы не хотите явно быть совместимым с несколькими файлами весов из моделей Dar knet, вам, вероятно, не нужно слишком беспокоиться об этом коде, если он работает для этого случая.