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 還支援非張量資料型別,例如 -
- 序列:一系列張量。這對於需要處理張量列表或集合的操作很有用。
- 對映:張量值的對映,通常用於關聯陣列或字典。
這些非張量型別更常用於經典的機器學習任務,在這些任務中,需要序列和對映等結構來表示某些操作。
廣告