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 脑浮点数 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:张量中非零值的 position(以 int64 存储)。
  • values:实际的非零值。

非张量数据类型

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

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

这些非张量类型更常用于经典的机器学习任务,在这些任务中,需要序列和映射等结构来表示某些操作。

广告