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

标签 python-3.x tensorflow conv-neural-network yolo

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)。据我所知,在实际框架代码之外的任何地方都没有正式指定这种格式。相关部分在文件中 src/parser.c , 函数 save_weights_uptoload_weights_upto .您可能会说,那段 Python 代码似乎是相应 C 代码的直接翻译。

看起来文件格式以三个32位整数开头(虽然C代码使用了sizeof(int),不一定是32位,但随便)对应于major,文件格式版本的次要和修订值。然后是网络的 seen 属性,根据文件版本,它可以是 intsize_t,通常表示 32 位或 64 位。然后,transpose 是一个 bool 值,取决于主要版本和次要版本是否大于 1000。主要、次要和修订字段的用法至少可以说是非正统的。

在 Python 代码中,既没有使用 seen 也没有使用 transposetranspose 被读入一个变量,但是那个变量没有被使用。不过理论上应该如此。我想代码适用于帖子中链接的文件,但如果 transpose 恰好为真,则权重的加载应该不同,如您在 load_connected_weights 中所见。 .

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

关于python-3.x - 主要,次要,修订,转置在tensorflow中加载权重是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60563246/

相关文章:

python-3.x - Tensorflow 1.15/Keras 2.3.1 Model.train_on_batch() 返回的值多于输出/损失函数

neural-network - Caffe 中的多个精度层

python - 使用非类型对象注释参数

python - 如何将输入读取为数字?

tensorflow - 与 keras 调谐器相关的超参数

python - 链接多个队列时的 Tensorflow 竞争条件

python - 用于分类非图像数据集的 Conv1D 显示错误 ValueError : `logits` and `labels` must have the same shape

python - 模型训练在第一个纪元完成后陷入困境...第二个纪元甚至不会启动,也不会抛出任何错误,它只是保持空闲状态

python - 内部包含 `yield` 的列表理解和生成器理解之间的区别

python-3.x - 为什么根据 python -a(b+c) != a(-b-c) ?