【ONNX】---Shape Inference

本文介绍了ONNX提供的shape推理机制,包括如何使用已有的shape推理函数及如何自定义实现。shape推理有助于推断模型输出的维度,对于模型优化和部署至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ONNX提供了ONNX图上shape推理的可选实现,该实现包含每一个核心操作符,且为扩展提供了接口。因此,既可以使用已有shape推理函数到你的图中,也可以自定义shape推理实现来与你的操作符保持一致,或者同时使用以上两种方法;shape推理函数是OpSchema中的一个成员。

引用shape推理

可通过c++或者python引用shape推理,其中python API为:
在这里插入图片描述
可运行的python脚本为:链接
C++ API为一个函数:
在这里插入图片描述
其中,参数ModelProto是进行shape推理的文件,该文件使用内联方式标注,且带有shape信息;第二个参数是可选的;

实现自定义操作符的shape推理

通过使用
在这里插入图片描述
在操作符规则中增加shape推理,其中InferenceFunction定义在shape_inference.h中,该文件中还有核心接口结构体InferenceContext以及一些帮助。InferenceContext有助于进入操作符的输入,并且允许保存推理输出信息。

更多示例,请搜索TypeAndShapeInferenceFunction,其中一个实现是onnx/defs/tensor/defs.cc中的concat;

限制

shape推理不保证是完整的,特别地,一些动态行为会阻塞shape推理流,如reshape到一个动态可变的大小,并且,不是所有的操作符都要有一份shape推理实现。

shape推理仅对常量和简单的变量有效,不支持包含变量的算术表达式。如,Concat大小为(5,2)和(7,2)的两个张量会产生一个(12,2)大小的张量,但是当Concat大小为(5,2)和(N,2)的张量将只能产生(M,2)的张量,而不是(N+5,2)。值得注意的是,未知的符号值会被反传,因此这里的M代表与其他M相同的未知数量。

这些限制是当前实现的一个属性,不是功能限制,如果你需要一些更优的东西,请让我们知道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值