建構及轉換模型

微控制器的 RAM 和儲存空間有限,因此對機器學習模型的大小設有限制。此外,TensorFlow Lite for Microcontrollers 目前支援部分作業,因此並非所有模型架構都能提供。

本文件說明如何轉換 TensorFlow 模型,以便在微控制器上執行。其中也會概述支援的作業,並提供一些指引,讓您瞭解如何設計及訓練模型,以因應有限的記憶體容量。

如需建構及轉換模型的端對端範例,請參閱 Hello World 範例。

模型轉換

如要將經過訓練的 TensorFlow 模型轉換為在微控制器上執行,建議您使用 TensorFlow Lite 轉換工具 Python API。這項操作會將模型轉換為 FlatBuffer、縮減模型大小,並修改模型以使用 TensorFlow Lite 作業。

如要取得最小的模型大小,請考慮使用訓練後的量化

轉換為 C 陣列

許多微控制器平台都不支援原生檔案系統。如要在程式中使用模型,最簡單的方法是將其納入為 C 陣列,然後編譯至程式中。

下列 Unix 指令會產生 C 來源檔案,其中包含以 char 陣列顯示的 TensorFlow Lite 模型:

xxd -i converted_model.tflite > model_data.cc

輸出結果會與下列內容相似:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

產生檔案後,您可以將其納入程式中。如要提高嵌入平台上的記憶體效率,請務必將陣列宣告變更為 const

如需在程式中加入及使用模型的範例,請參閱 Hello World 範例中的 hello_world_test.cc

模型架構和訓練

設計用於微控制器的模型時,請務必考量要使用的模型大小、工作負載和作業。

模型大小

模型必須夠小,才能與程式的其餘部分 (包括二進位檔和執行階段) 一起放置在目標裝置的記憶體中。

如要建立較小的模型,您可以在架構中使用較少與較小的層。不過,小型模型較可能出現配適不足的情況。這表示在有許多問題的情況下,建議您嘗試使用記憶體中最大的模型。不過,使用較大的模型也會增加處理器工作負載。

工作負載

模型的大小和複雜性會對工作負載產生影響。複雜的大型模型可能會導致任務週期較高,也就是裝置處理器在工作上花費的時間較多,閒置時間也較少。這會增加耗電量和熱源輸出,這可能是因應用程式本身的問題而存在問題。

作業支援

TensorFlow Lite for Microcontrollers 目前支援一部分的 TensorFlow 運算,這會影響可執行的模型架構。我們正在努力擴大作業支援範圍,包括參考實作和特定架構最佳化。

您可以在 micro_mutable_ops_resolver.h 檔案中查看支援的作業