前言
构建onnx方式通常有两种:
1、通过代码转换成onnx结构,比如pytorch —> onnx
2、通过onnx 自定义结点,图,生成onnx结构
本文主要是简单学习和使用两种不同onnx结构,
下面以 MatMul
结点进行分析
方式
方法一:pytorch --> onnx
暂缓,主要研究方式二
方法二: onnx
import onnx
from onnx import TensorProto, helper, numpy_helper
def run():
print("run start....\n")
MatMul = helper.make_node(
"MatMul",
inputs=["A", "B"],
outputs=["matmul_output"],
name="matmul_node",
)
graph = helper.make_graph(
nodes=[MatMul],
name="test_graph",
inputs=[
helper.make_tensor_value_info("A", TensorProto.FLOAT, [2048, 3, 64, 32]),
helper.make_tensor_value_info("B", TensorProto.FLOAT, [2048, 3, 32,64]),
], # use your input
outputs=[
helper.make_tensor_value_info(
"matmul_output", TensorProto.FLOAT, [2048, 3, 64, 64]
)
], # use your output
)
op = onnx.OperatorSetIdProto()
op.version = 11
model = helper.make_model(graph, opset_imports=[op])
model.ir_version = 8
print("run done....\n")
return model
if __name__ == "__main__":
model = run()
onnx.save(model, "./test_matmul.onnx")