TensorFlow Lite 和 TensorFlow 運算子相容性

您在模型中使用的機器學習 (ML) 運算子,可能會影響將 TensorFlow 模型轉換為 TensorFlow Lite 格式的程序。TensorFlow Lite 轉換工具支援常見推論模型中使用的 TensorFlow 運算數量有限,因此並非所有模型都能直接轉換。轉換工具工具可讓您納入其他運算子,但以這種方式轉換模型,也需要修改用來執行模型的 TensorFlow Lite 執行階段環境,而這可能會限制使用標準執行階段部署選項 (例如 Google Play 服務) 的能力。

TensorFlow Lite Converter 的設計宗旨是分析模型結構並套用最佳化,確保與直接支援的運算子相容。舉例來說,視模型中的機器學習運算子而定,轉換工具可能會移除或融合這些運算子,以便將其對應至其 TensorFlow Lite 對應項目。

即使有支援的作業,有時還是為了效能考量而預期使用特定的使用模式。如要瞭解如何建構可搭配 TensorFlow Lite 使用的 TensorFlow 模型,最好的方法就是仔細考慮運算的轉換和最佳化方式,以及這個程序的限制。

支援的運算子

TensorFlow Lite 內建運算子是 TensorFlow 核心程式庫的一部分運算子。您的 TensorFlow 模型也可能包含複合式運算子或由您定義的新運算子的自訂運算子。下圖顯示這些運算子之間的關係。

TensorFlow 運算子

在機器學習模型運算子中,轉換程序支援的模型類型有 3 種:

  1. 僅使用 TensorFlow Lite 內建運算子的模型。(建議)。
  2. 具有內建運算子和選擇 TensorFlow core 運算子的模型。
  3. 使用內建運算子、TensorFlow 核心運算子和/或自訂運算子的模型。

如果模型僅包含 TensorFlow Lite 原生支援的作業,則不需要任何其他標記進行轉換。建議您採取這個做法,因為這類模型能流暢地轉換,且使用預設的 TensorFlow Lite 執行階段來進行最佳化和執行。模型還有其他部署選項,例如 Google Play 服務。請參閱 TensorFlow Lite 轉換工具指南,瞭解如何開始使用。如需內建運算子的清單,請參閱 TensorFlow Lite 作業頁面

如果您需要納入核心程式庫中的特定 TensorFlow 運算,則必須在轉換時指定,並確保執行階段包含這些作業。如需詳細步驟,請參閱選取 TensorFlow 運算子主題。

請盡可能避免使用最後一種選項,在轉換後的模型中加入自訂運算子。自訂運算子是由結合多個原始 TensorFlow 核心運算子或定義全新運算子來建立的運算子。轉換自訂運算子後,就可以透過內建 TensorFlow Lite 程式庫以外的依附元件產生依附元件,從而增加整體模型大小。如未特別針對行動裝置或裝置部署建立自訂作業,相較於伺服器環境,部署至資源受限的裝置時,效能可能會較差。最後,就像納入特定 TensorFlow 核心運算子一樣,自訂運算子會要求您修改模型執行階段環境,讓您無法使用標準執行階段服務,例如 Google Play 服務

支援類型

大部分的 TensorFlow Lite 作業會同時指定浮點 (float32) 和量化 (uint8int8) 推論,但許多運算還未用於 tf.float16 和字串等其他類型。

除了使用不同版本的運算外,浮點與量化模型之間的差異在於兩者的轉換方式。量化轉換需要張量的動態範圍資訊。您必須在模型訓練期間進行「假量化」、透過校正資料集取得範圍資訊,或是進行「即時」範圍預估值。詳情請參閱量化相關說明。

直接轉換、持續折疊與融合

雖然沒有直接對等項目,但 TensorFlow Lite 仍可以處理許多 TensorFlow 作業。這種情況是可以直接從圖表中移除 (tf.identity)、由張量 (tf.placeholder) 取代,或融合為更複雜的作業 (tf.nn.bias_add)。有時也會透過其中一種程序移除部分支援的作業。

以下僅列舉一部分的 TensorFlow 運算,通常會從圖表中移除:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

實驗作業

下列 TensorFlow Lite 作業已存在,但還不能用於自訂模型:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF