主要,次要,修订,转置在tensorflow中加载权重是什么意思?

What does major, minor, revison, transpose means in loading weights in tensorflow?

加载 YOLOv3 的权重 Object-detection-with-yolov3-in-keras

有人能告诉我加载权重和转置语句的含义是什么吗

with open(weight_file, 'rb') as w_f:
        major,  = struct.unpack('i', w_f.read(4))
        minor,  = struct.unpack('i', w_f.read(4))
        revision, = struct.unpack('i', w_f.read(4))
        if (major*10 + minor) >= 2 and major < 1000 and minor < 1000:
            w_f.read(8)
        else:
            w_f.read(4)
        transpose = (major > 1000) or (minor > 1000)
        binary = w_f.read() 

正在解析权重文件,该文件以Darknet framework (source code). This format is not formally specified anywhere outside the actual framework code, as far as I can tell. The relevant parts are in the file src/parser.c, functions save_weights_upto and load_weights_upto使用的格式保存。您可能会说,那段 Python 代码似乎是相应 C 代码的直接翻译。

似乎文件格式以三个 32 位整数开始(虽然 C 代码使用 sizeof(int),不一定是 32 位,但无论如何)对应于主要,次要和修订值文件格式版本。然后是网络的 seen 属性,根据文件版本,可以是 intsize_t,通常表示 32 位或 64 位。然后,transpose是一个布尔值,取决于主要版本和次要版本是否大于1000。主要,次要和修订字段的用法至少可以说是非正统的。

在Python代码中,没有使用seentransposetranspose 被读入一个变量,但是那个变量没有被使用。不过理论上应该如此。我想该代码适用于 post 中链接的文件,但如果 transpose 恰好为真,则权重的加载应该不同,正如您在 load_connected_weights 中看到的那样。 =25=]

无论如何,所有这些都是与该示例中使用的 Darknet 文件格式相关的非常具体的问题。除非你想明确地与 Darknet 模型中的几个不同权重文件兼容,否则你可能不需要太担心该代码,只要它适用于那种情况。