ONNX简介
开放神经网络交换ONNX(Open Neural Network Exchange)是一套表示深度神经网络模型的开放格式,由微软和Facebook于2017推出,然后迅速得到了各大厂商和框架的支持。通过短短几年的发展,已经成为表示深度学习模型的实际标准,并且通过ONNX-ML
,可以支持传统非神经网络机器学习模型,大有一统整个AI模型交换标准。
ONNX定义了一组与环境和平台无关的标准格式,为AI模型的互操作性提供了基础,使AI模型可以在不同框架和环境下交互使用。硬件和软件厂商可以基于ONNX标准优化模型性能,让所有兼容ONNX标准的框架受益。目前,ONNX主要关注在模型预测方面(inferring),使用不同框架训练的模型,转化为ONNX格式后,可以很容易的部署在兼容ONNX的运行环境中。
ONNX 版本
转换器可以为特定版本的 ONNX 转换模型。每个 ONNX 版本都标有函数onnx_opset_version返回的 opset 编号。如果在转换模型时未指定参数目标 opset(参数target_opset),则此函数返回该参数的默认值。每个运算符都进行了版本控制。该库为每个操作员选择低于或等于目标 opset 编号的最新版本。ONNX 模型对于每个操作员域都有一个 opset 编号,此值是所有 onnx 节点中的最大 opset 数。
<<<
from skl2onnx import __max_supported_opset__
print("Last supported opset:", __max_supported_opset__)
>>>
Last supported opset: 15
ONNX标准介绍
ONNX规范由以下几个部分组成:
- 一个可扩展的计算图模型:定义了通用的计算图中间表示法(Intermediate Representation)。
- 内置操作符集:
ai.onnx
和ai.onnx.ml
,ai.onnx
是默认的操作符集,主要针对神经网络模型,ai.onnx.ml
主要适用于传统非神经网络机器学习模型。 - 标准数据类型。包括张量(tensors)、序列(sequences)和映射(maps)。
目前,ONNX规范有两个官方变体,主要区别在与支持的