建構及轉換模型 (original) (raw)
微控制器的 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敬上