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 还支持非张量数据类型,例如 -
- 序列:一系列张量。这对于需要处理张量列表或集合的操作很有用。
- 映射:张量值的映射,通常用于关联数组或字典。
这些非张量类型更常用于经典的机器学习任务,在这些任务中,需要序列和映射等结构来表示某些操作。
广告