Как убедиться, что TFLite Interpreter использует только операции int8? - PullRequest
1 голос
/ 07 апреля 2020

Я изучал квантование с использованием TFLite от Tensorflow. Насколько я понимаю, можно квантовать веса моей модели (чтобы они были сохранены, используя в 4 раза меньше памяти), но это не обязательно означает, что модель не будет преобразовывать ее обратно в числа с плавающей запятой для запуска. Я также понял, что для запуска моей модели только через int мне нужно установить следующие параметры:

converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8

Я хотел бы знать, каковы различия в tf.lite.Interpreter между загруженной моделью в которые эти параметры были установлены, и один, в котором они не были. Я пытался исследовать .get_tensor_details() для этого, но я не заметил никакой разницы.

1 Ответ

1 голос
/ 07 апреля 2020

В зависимости от ваших требований (производительность, память и время выполнения) квантование после обучения можно выполнить двумя способами.

Подход № 1: Квантование веса после тренировки (только квантование весов). В этом случае только веса взвешиваются до int8, но активации остаются такими же, как были. Входные и выходные данные логического вывода являются числами с плавающей запятой.

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.experimental_new_converter = True
# Post training quantization
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
tflite_quant_model = converter.convert()
tflite_model_quant_file = tflite_models_dir/"lstm_model_quant.tflite"
tflite_model_quant_file.write_bytes(tflite_quant_model)

Подход № 2. Полное целочисленное квантование (Квантование весов и активаций). В этом случае весовые коэффициенты и активации квантовываются в int8. Сначала нам нужно следовать подходу № 1 для квантования веса, а затем реализовать следующий код для выполнения полного целочисленного квантования. Это использует квантованный ввод и вывод, что делает его совместимым с большим количеством ускорителей, таких как Coral Edge TPU. Входные и выходные данные логического вывода являются целыми числами.

converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8

tflite_model_quant = converter.convert()
tflite_model_quant_file = tflite_models_dir/"lstm_model_quant_io.tflite"
tflite_model_quant_file.write_bytes(tflite_model_quant)

Более подробная информация о квантовании веса здесь , и вы можете найти более подробную информацию о полном целочисленном квантовании здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...