如何从 ONNX 模型中读取各个层的权重和偏差值?

How to read individual layers' weight & bias values from ONNX model?

如何从 ONNX 模型中获取 weight/bias 矩阵值,我目前可以从 model.onnx 中获取输入、内核大小、步幅和填充值。我加载模型,然后读取图形节点以获得相同的结果:

import onnx
m = onnx.load('model.onnx')
print(m.graph.node)

在官方 git 回购上发布问题后,我得到了问题的答案。我们可以从 m.graph.

中的初始化器访问权重值
weights = m.graph.initializer

要获取权重矩阵,需要使用numpy_helper from onnx.

from onnx import numpy_helper
w1 = numpy_helper.to_array(weights[0])
from onnx import numpy_helper
MODEL_PATH = "....../resnet50"
_model = onnx.load(MODEL_PATH + "/model.onnx")
INTIALIZERS=_model.graph.initializer
Weight=[]
for initializer in INTIALIZERS:
    W= numpy_helper.to_array(initializer)
    Weight.append(W)

以下代码可帮助您从 onnx 模型创建状态字典。

import onnx
from onnx import numpy_helper
onnx_model   = onnx.load("model.onnx")
INTIALIZERS  = onnx_model.graph.initializer
onnx_weights = {}
for initializer in INTIALIZERS:
    W = numpy_helper.to_array(initializer)
    onnx_weights[initializer.name] = W