onnx 1.16 doc学习笔记五:python API-函数、解析与形状推理

onnx作为一个通用格式,很少有中文教程,因此开一篇文章对onnx 1.16文档进行翻译与进一步解释,
onnx 1.16官方文档:https://onnx.ai/onnx/intro/index.html](https://onnx.ai/onnx/intro/index.html),
如果觉得有收获,麻烦点赞收藏关注,目前仅在CSDN发布,本博客会分为多个章节,目前尚在连载中,详见专栏链接:
https://blog.csdn.net/qq_33345365/category_12581965.html

开始编辑时间:2024/2/21;最后编辑时间:2024/2/21

这是本教程的第四篇,其余内容见上述专栏链接。


ONNX with Python

本教程的第一篇:介绍了ONNX的基本概念。

在本教程的第二篇,介绍了ONNX关于Python的API,具体涉及一个简单的线性回归例子和序列化。

本教程的第三篇,包括python API的三个部分:初始化器Initializer;属性Attributes;算子集和元数据Opset和Metadata

本教程的第四篇,包括子图的两个内容,使用If和Scan算子实现子图的选择和循环。

在本篇中,会介绍以下内容:

  1. 函数
    1. 不带属性的函数
    2. 带有属性的函数
  2. 模型解析:onnx提供了一种简单定义图的方式,可以实现快速构图,并不常用。
  3. 检查器与形状推理 checker and shape inference
    1. 检查器:检查模型是否有效
    2. 形状推理:估计中间结果的形状和种类

函数

正如前一章所述,函数可以用来缩短构建模型的代码,并为运行时预测提供更多可能性,如果存在特定函数实现,可以使其运行更快。如果没有特定实现,运行时仍然可以基于现有算子使用默认实现。

make_function 函数用于定义一个函数。它就像一个简化类型的图,更像是一个模板。这个 API 可能会有所演变,它也不包含初始化器。

没有属性的函数

这是更简单的情况,函数的每个输入都是在执行时已知的动态对象。

import numpy
from onnx import numpy_helper, TensorProto
from onnx.helper import (
    make_model, make_node, set_model_props, make_tensor,
    make_graph, make_tensor_value_info, make_opsetid,
    make_function)
from onnx.checker import check_model

new_domain = 'custom'
opset_imports = [make_opsetid("", 14), make_opsetid(new_domain, 1)]

# 定义一个线程回归的函数
node1 = make_node('MatMul', ['X', 'A'], ['XA'])
node2 = make_node('Add', ['XA', 'B'], ['Y'])

linear_regression = make_function(
    new_domain,  # domain name
    'LinearRegression',  # function name
    ['X', 'A', 'B'],  # input names
    ['Y'],  # output names
    [node1, node2],  # nodes
    opset_imports,  # opsets
    [])  # attribute names

# 在没有变量前,函数是可以构建的
X = make_tensor_value_info('X', TensorProto.FLOAT, [None, None])
A = make_tensor_value_info('A', TensorProto
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whyte王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值