Квантование после обучения включает в себя общие методы, позволяющие уменьшить задержку процессора и аппаратного ускорителя, обработку, мощность и размер модели с небольшим ухудшением точности модели. Эти методы можно реализовать на уже обученной модели TensorFlow с плавающей запятой и применить во время преобразования TensorFlow Lite. Эти методы включены в качестве опций в конвертере TensorFlow Lite .
Чтобы сразу перейти к комплексным примерам, ознакомьтесь со следующими уроками:
- Квантование динамического диапазона после обучения
- Полное целочисленное квантование после обучения
- Квантование float16 после обучения
Квантование весов
Веса можно преобразовать в типы с пониженной точностью, например, в 16-битные числа с плавающей запятой или 8-битные целые числа. Обычно мы рекомендуем 16-битные числа с плавающей запятой для ускорения графического процессора и 8-битные целые числа для выполнения процессора.
Например, вот как задать 8-битное целочисленное весовое квантование:
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()
При выводе наиболее критически интенсивные части вычисляются с использованием 8 бит вместо чисел с плавающей запятой. Существуют некоторые издержки производительности, связанные со временем вывода, по сравнению с квантованием весов и активаций ниже.
Для получения дополнительной информации см. руководство по квантованию после обучения TensorFlow Lite.
Полное целочисленное квантование весов и активаций
Улучшите задержку, обработку и энергопотребление, а также получите доступ к аппаратным ускорителям, работающим только с целыми числами, обеспечив квантование как весов, так и активаций. Для этого требуется небольшой репрезентативный набор данных.
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()
Для удобства полученная модель по-прежнему будет принимать входные и выходные данные с плавающей запятой.
Для получения дополнительной информации см. руководство по квантованию после обучения TensorFlow Lite.