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:张量值的映射,通常用于关联数组或字典。
这些非张量类型更常用于经典机器学习任务,其中序列和映射等结构对于表示某些操作是必不可少的。