如何从 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)
找到 python 的要点 here
重现 3 的要点:
from onnx import shape_inference
inferred_model = shape_inference.infer_shapes(original_model)
并在 inferred_model.graph.value_info
中找到形状信息。
我想'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)
找到 python 的要点 here
重现 3 的要点:
from onnx import shape_inference
inferred_model = shape_inference.infer_shapes(original_model)
并在 inferred_model.graph.value_info
中找到形状信息。