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

How to extract layer shape and type from ONNX / PyTorch?

我想'translate'一个PyTorch模型到另一个框架(non-tf/keras)。

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

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

来自对您问题的评论中的讨论:

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

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

# model is an onnx model
graph = model.grap
# 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)

形状推理讲here and for python here

找到 python 的要点 here

重现 3 的要点:

from onnx import shape_inference
inferred_model = shape_inference.infer_shapes(original_model)

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

您还可以使用 netron or from GitHub 来直观地表示该信息。