1. 程式人生 > >【譯】Post-training 量化

【譯】Post-training 量化

Post-training 量化

Post-training 量化是一種可以減小模型大小,同時降低 3 倍延遲並且仍然能夠保持模型精度的一般方法。Post-training量化將權重從浮點量化為 8 位精度。此技術在 TensorFlow Lite model converter 中作為一個功能選項被使用。

import tensorflow as tf
converter = tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
converter.post_training_quantize = True
tflite_quantized_model = converter.convert()
open("quantized_model.tflite"
, "wb").write(tflite_quantized_model) 複製程式碼

在推理時,權重值從 8 位精度轉換為浮點數,並使用浮點核心進行計算。此轉換隻執行一次並進行快取以減少延遲。

Commit suggestion Add suggestion to batch

在推理時,權重值從 8 位精度轉換為浮點數,並使用浮點核心進行計算。此轉換隻執行一次並進行快取以減少延遲。

為了進一步改善延遲,混合運算子動態地將啟用量化為 8 位,並使用 8 位權重和啟用函式執行計算。此種優化方式可以提供接近完全定點推斷時的延遲。但是,輸出仍然使用浮點儲存,因此混合運算的加速效果仍然小於完全定點計算。混合操作可用於大多數計算密集型網路:

由於權重在訓練後被量化,因此可能存在精度損失,特別是對於較小的網路。TensorFlow Lite model repository提供了為特定網路提供預訓練的完全量化模型。檢查量化模型的準確性以驗證任何精度上的降低是否在可接受的限度內是很重要的。這裡有一個工具可以評估

TensorFlow Lite 模型精確度

如果精確度下降幅度過大,可以考慮使用注重量化的訓練

量化張量的表示

TensorFlow 將數字浮點陣列轉換為 8 位表示形式作為壓縮問題。由於訓練的神經網路模型中的權重和啟用張量傾向於分佈在相對小範圍內的值。(例如,對於權重為 -15 到 +15 ,對於影象模型啟用為 -500 到 1000 )。並且由於神經網路在處理噪聲資料時具有健壯性,因此通過量化到一小組值引入的誤差將整體結果的精度保持在可接受的閾值內。選定的表示必須執行快速計算,尤其是在執行模型時產生的具有大量計算的大型矩陣乘法。

這用兩個浮點表示,它儲存對應於最低和最高量化值的總體最小值和最大值。量化陣列中的每個條目表示該範圍內的浮點值,在最小值和最大值之間線性分佈。例如,當一個 8 位陣列的最小值為 -10.0 ,最大值為 30.0f 時,其量化值表示如下:

量化值 浮點值
0 -10.0
128 10.0
255 30.0
表格 2: 量化值範圍示例

這種表示方式的好處有:

  • 它有效地表示任意大小的範圍。。
  • 數值無需對稱。
  • 有符號數和無符號數均可被表示。
  • 線性擴充套件使乘法變得簡單。