建構及轉換模型

微控制器的 RAM 和儲存空間有限,因此對 機器學習模型的大小此外,針對 微控制器目前只支援部分作業 模型架構

本文件說明將 TensorFlow 模型轉換為執行該模型的程序 微控制器同時也會概述支援的作業,並提供一些 說明如何設計和訓練模型,以適應有限的記憶體。

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

模型轉換

如要將經過訓練的 TensorFlow 模型轉換為在微控制器上執行,請使用 這個 LiteRT 轉換工具 Python API。 這樣模型就會轉換成 FlatBuffer,縮減模型大小 並進行修改,以使用 LiteRT 作業。

如要取得最小的模型大小,建議使用 訓練後的量化

轉換為 C 陣列

許多微控制器平台不支援原生檔案系統, 如要使用程式中的模型,最簡單的方法就是以 C 陣列的形式加入模型,並 編譯成您的程式

下列 Uniix 指令會產生 C 來源檔案,其中包含 做為 char 陣列的 LiteRT 模型:

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_test.cc敬上 「Hello World」範例。

模型架構和訓練

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

模型大小

模型必須夠小,才能容納在目標裝置的記憶體中 做為二進位檔和執行階段的程式其餘部分

若要建立較小的模型,您可以使用較少和較小的圖層 這個架構的簡短總覽不過,小型模型較可能出現配適不足的問題。 也就是說,使用最大模型時 可容納於記憶體中的尺寸不過,採用較大型的模型 處理器工作負載

工作負載

模型的大小和複雜度會影響工作負載。大型、複雜 模型的任務週期可能較長,也就是裝置的處理器 花了更多時間工作,以及減少閒置的時間。這麼做會增加充電功率 耗電量和熱輸出量,視你的 應用程式。

作業支援

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

可在檔案中查看支援的作業 micro_mutable_ops_resolver.h敬上