ONNX - 数据类型

在 ONNX(开放神经网络交换)中,模型中使用的数据类型是模型表示和计算的一个重要方面。作为机器学习模型的标准格式,ONNX 支持一系列数据类型,允许不同机器学习框架之间的互操作性。

在本教程中,我们将探索各种 ONNX 数据类型,包括张量类型、元素类型、稀疏张量和非张量类型,如序列映射

了解 ONNX 中的张量

ONNX 主要关注涉及张量的数值计算,张量是多维数组。张量用于表示 ONNX 模型中的输入、输出和中间值。

每个张量由三个关键组件定义 −

  • 元素类型:指定张量中所有元素的数据类型。
  • 形状:描述张量维度的数组。形状可以是固定的,也可以是动态的,张量可以具有空形状(例如标量)。
  • 连续数组:完全填充的数据值数组。

此设计优化了 ONNX,使其适用于深度学习应用中的数值计算,其中大型多维数组很常见。

支持的元素类型

最初,ONNX 旨在支持深度学习模型,这些模型通常使用浮点数(32 位浮点数)。但是,当前版本的 ONNX 支持多种元素类型,从而允许在不同的机器学习和数据处理任务中灵活使用。

以下是 ONNX 中支持的数据类型列表 −

元素类型 描述
FLOAT 32 位浮点数
UINT8 8 位无符号整数
INT8 8 位有符号整数
UINT16 16 位无符号整数
INT16 16 位有符号整数
INT32 32 位有符号整数
INT64 64 位有符号整数
STRING 字符串数据类型
BOOL 布尔类型
FLOAT16 16 位浮点数
DOUBLE 64 位浮点数点
UINT32 32 位无符号整数
UINT64 64 位无符号整数
COMPLEX64 64 位复数
COMPLEX128 128 位复数
BFLOAT16 Brain 浮点 16 位格式
FLOAT8E4M3FN 8 位浮点(格式E4M3FN)
FLOAT8E4M3FNUZ 8 位浮点数 (格式 E4M3FNUZ)
FLOAT8E5M2 8 位浮点数 (格式 E5M2)
FLOAT8E5M2FNUZ 8 位浮点数 (格式 E5M2FNUZ)
UINT4 4 位无符号整数
INT4 4 位有符号整数
FLOAT4E2M1 4 位浮点(格式 E2M1)

稀疏张量

处理包含大量零的数据时,稀疏张量非常有用。ONNX 支持稀疏张量,尤其是 2D 稀疏张量。这些由类 SparseTensorProto 表示,该类包含以下属性 −

  • dims:指定稀疏张量的形状。
  • indices:张量中非零值的位置(存储为 int64)。
  • values:实际的非零值。

非张量数据类型

除了张量之外,ONNX 还支持非张量数据类型,例如 −

  • Sequence:张量序列。这对于需要处理张量列表或集合的操作非常有用。
  • Map:张量值的映射,通常用于关联数组或字典。

这些非张量类型更常用于经典机器学习任务,其中序列和映射等结构对于表示某些操作是必不可少的。