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

时间:2018-09-19 09:22:41

标签: protocol-buffers onnx

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

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

3 个答案:

答案 0 :(得分:0)

在官方git repo上发布问题后,我得到了问题的答案。我们可以从m.graph中的初始值设定项访问权重值。

weights = m.graph.initializer

要获取权重矩阵,您需要使用 onnx 中的numpy_helper

from onnx import numpy_helper
w1 = numpy_helper.to_array(weights[0])

答案 1 :(得分: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)

答案 2 :(得分:0)

以下代码可帮助您从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