Квантование после обучения

Квантование после обучения включает в себя общие методы для уменьшения задержки ЦП и аппаратного ускорителя, обработки, мощности и размера модели с небольшим снижением точности модели. Эти методы можно выполнять на уже обученной плавающей модели TensorFlow и применять во время преобразования TensorFlow Lite. Эти методы включены в качестве опций в конвертере TensorFlow Lite .

Чтобы сразу перейти к сквозным примерам, см. следующие руководства:

Квантование весов

Веса могут быть преобразованы в типы с пониженной точностью, такие как 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.