Post-training 量化是一種能夠減少模型大小,同時下降 3 倍延遲而且仍然可以保持模型精度的通常方法。Post-training量化將權重從浮點量化爲 8 位精度。此技術在 TensorFlow Lite model converter 中做爲一個功能選項被使用。python
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 位精度轉換爲浮點數,並使用浮點內核進行計算。此轉換隻執行一次並進行緩存以減小延遲。git
Commit suggestion Add suggestion to batchgithub
在推理時,權重值從 8 位精度轉換爲浮點數,並使用浮點內核進行計算。此轉換隻執行一次並進行緩存以減小延遲。api
爲了進一步改善延遲,混合運算符動態地將激活量化爲 8 位,並使用 8 位權重和激活函數執行計算。此種優化方式能夠提供接近徹底定點推斷時的延遲。可是,輸出仍然使用浮點存儲,所以混合運算的加速效果仍然小於徹底定點計算。混合操做可用於大多數計算密集型網絡:數組
因爲權重在訓練後被量化,所以可能存在精度損失,特別是對於較小的網絡。TensorFlow Lite model repository提供了爲特定網絡提供預訓練的徹底量化模型。檢查量化模型的準確性以驗證任何精度上的下降是否在可接受的限度內是很重要的。這裏有一個工具能夠評估 TensorFlow Lite 模型精確度。緩存
若是精確度降低幅度過大,能夠考慮使用注重量化的訓練。bash
TensorFlow 將數字浮點數組轉換爲 8 位表示形式做爲壓縮問題。因爲訓練的神經網絡模型中的權重和激活張量傾向於分佈在相對小範圍內的值。(例如,對於權重爲 -15 到 +15 ,對於圖像模型激活爲 -500 到 1000 )。而且因爲神經網絡在處理噪聲數據時具備健壯性,所以經過量化到一小組值引入的偏差將總體結果的精度保持在可接受的閾值內。選定的表示必須執行快速計算,尤爲是在運行模型時產生的具備大量計算的大型矩陣乘法。網絡
這用兩個浮點表示,它存儲對應於最低和最高量化值的整體最小值和最大值。量化陣列中的每一個條目表示該範圍內的浮點值,在最小值和最大值之間線性分佈。例如,當一個 8 位數組的最小值爲 -10.0 ,最大值爲 30.0f 時,其量化值表示以下:函數
量化值 | 浮點值 |
---|---|
0 | -10.0 |
128 | 10.0 |
255 | 30.0 |
這種表示方式的好處有:工具