Kwantyzacja po szkoleniu obejmuje ogólne techniki zmniejszania opóźnień procesora i akceleratora sprzętowego, przetwarzania, mocy i rozmiaru modelu przy niewielkim pogorszeniu dokładności modelu. Techniki te można wykonać na już wytrenowanym modelu float TensorFlow i zastosować podczas konwersji TensorFlow Lite. Techniki te są włączone jako opcje w konwerterze TensorFlow Lite .
Aby od razu przejść do kompleksowych przykładów, zapoznaj się z następującymi samouczkami:
- Kwantyzacja zakresu dynamicznego po treningu
- Pełna kwantyzacja całkowitoliczbowa po treningu
- Kwantyzacja typu float16 po treningu
Kwantowanie wag
Wagi można konwertować na typy o zmniejszonej precyzji, takie jak 16-bitowe liczby zmiennoprzecinkowe lub 8-bitowe liczby całkowite. Generalnie zalecamy 16-bitowe liczby zmiennoprzecinkowe do przyspieszania procesora graficznego i 8-bitowe liczby całkowite do wykonywania procesora.
Na przykład, oto jak określić 8-bitową kwantyzację liczb całkowitych:
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant_model = converter.convert()
Podsumowując, najbardziej krytyczne części są obliczane przy użyciu 8 bitów zamiast liczby zmiennoprzecinkowej. Istnieje pewien narzut wydajności związany z czasem wnioskowania w porównaniu z kwantyzacją zarówno wag, jak i aktywacji poniżej.
Aby uzyskać więcej informacji, zobacz przewodnik dotyczący kwantyzacji potreningowej TensorFlow Lite.
Pełna kwantyzacja liczb całkowitych wag i aktywacji
Popraw opóźnienia, przetwarzanie i zużycie energii oraz uzyskaj dostęp do akceleratorów sprzętowych obsługujących wyłącznie liczby całkowite, upewniając się, że zarówno wagi, jak i aktywacje są kwantowane. Wymaga to małego reprezentatywnego zestawu danych.
import tensorflow as tf
def representative_dataset_gen():
for _ in range(num_calibration_steps):
# Get sample input data as a numpy array in a method of your choosing.
yield [input]
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset_gen
tflite_quant_model = converter.convert()
Wynikowy model dla wygody nadal będzie pobierał dane wejściowe i wyjściowe typu float.
Aby uzyskać więcej informacji, zobacz przewodnik dotyczący kwantyzacji potreningowej TensorFlow Lite.