微控制器的 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
中查看