如何从 ONNX / PyTorch 中提取图层形状和类型?

use*_*306 2 python machine-learning deep-learning pytorch onnx

我想将 PyTorch 模型“翻译”到另一个框架(非 tf/keras)。

我正在尝试采用 pytorch 模型,并自动转换到其他框架,其中包含类似类型的层(即 conv2d、dense,...)。

有没有办法直接从 pytorch 或通过 onnx 检索模型层、它们的类型、形状和连接?(到目前为止,权重并不重要)

Ice*_*ker 6

根据对您问题的评论中的讨论:

onnx 中的每个节点都有一个命名输入列表和一个命名输出列表。

对于使用 node.input 访问的输入列表,您可以为每个输入索引提供提供该输入的图形 input_name 或提供该输入的先前输出的名称。还有一些初始化程序,它们是 onnx 参数。

# model is an onnx model
graph = model.graph
# graph inputs
for input_name in graph.input:
    print(input_name)
# graph parameters
for init in graph.init:
    print(init.name)
# graph outputs
for output_name in graph.output:
    print(output_name)
# iterate over nodes
for node in graph.node:
    # node inputs
    for idx, node_input_name in enumerate(node.input):
        print(idx, node_input_name)
    # node outputs
    for idx, node_output_name in enumerate(node.output):
        print(idx, node_output_name)
Run Code Online (Sandbox Code Playgroud)

这里讨论了形状推断,这里讨论了 python 的形状推断

python 的要点可以在这里找到

重现 3 的要点:

from onnx import shape_inference
inferred_model = shape_inference.infer_shapes(original_model)
Run Code Online (Sandbox Code Playgroud)

并在 中找到形状信息inferred_model.graph.value_info

您还可以使用netronGitHub来直观地表示该信息。