ONNX - 文件格式

ONNX 文件格式基本上是一个封装机器学习模型整个结构的容器。将模型导出为 ONNX 格式时,生成的文件(通常带有 .onnx 扩展名)包含基于图形的模型表示。如果您曾经使用过 ImageNet、MobileNet 或 AlexNet 等深度学习架构,您会发现 ONNX 表示非常熟悉。

ONNX 文件格式是一种表示机器学习模型的灵活方式,使它们可以在各种框架之间移植。ONNX 模型的核心由图形(计算节点的集合)组成。图中的每个节点代表一个特定的操作(例如,卷积、ReLU 激活),数据按顺序在这些节点中移动,就像数据在神经网络中通过层流动一样。

在本教程中,我们将详细了解 ONNX 文件格式,讨论它如何构建模型,包括其组件,如计算图、节点、运算符和元数据。

ONNX 文件格式的关键组件

ONNX 文件包含各种组件,有助于描述模型、其结构及其工作原理。让我们讨论一下这些组件。

模型

ONNX 文件表示一个模型,并包含关键元素,例如 −

  • 版本信息:有关所用 ONNX 版本的详细信息。
  • 元数据:有关模型的其他信息,例如作者或所用框架。
  • 非循环计算数据流图:描述模型内计算执行方式的核心结构。

图表

ONNX 文件的核心是代表计算流程的图表。可以将其视为模型处理输入和产生输出所经过的操作的映射。

  • 输入和输出:描述进入和离开模型的数据。它包括数据类型和形状(维度)等信息。
  • 计算节点列表:图中的每个节点代表一个计算步骤(例如,应用激活函数)。
  • 图名称:描述模型整体结构的图的名称。

计算节点

每个计算节点执行特定任务,例如将函数应用于输入数据。

  • 输入:每个节点可能有零个或多个预定义类型的输入,这些输入是其他节点或外部输入的输出。
  • 输出:每个节点产生一个或多个输出,这些输出将传递给序列中的下一个计算节点。
  • 运算符:这些表示正在应用的操作(例如,矩阵乘法、ReLU激活)。
  • 运算符参数:每个运算符可能具有某些参数,例如学习率或规范化因子。

了解图形结构

ONNX 图的结构是一系列相互连接的计算节点,数据在它们之间流动。可以将其想象成神经网络的各层,其中每一层处理输入数据并将其传递到下一层。

  • 图形输入:这些是数据的起点,输入在此定义(例如,CNN 中的图像张量)。
  • 图形输出:数据通过所有计算节点后,将生成最终输出张量(例如,分类标签)。
  • 计算节点:这些代表模型中的各个操作,例如卷积、激活(ReLU)、池化和全连接层。