Преобразование модели keras в квантованную tflite потерянную точность - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь преобразовать свою модель keras в квантованную модель tflite, чтобы я мог запустить свою модель на коралловом TPU, но результаты моей модели keras и модели tflite значительно отличаются.

Красные точки - это квантованные выходные данные модели tflite, а синие точки - исходные выходные данные модели keras.

enter image description here

Вот мой код для преобразования модели keras в квантованную модель tflite:

quant = True
gc.collect()
import tensorflow as tf
import numpy as np
import pathlib
print(tf.__version__)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
if quant:
    print("Converting quant....")
    sample_size = 200
    rdm_idx = np.random.choice(range(len(X_test)),sample_size)
    rep_data = tf.cast(X_train[rdm_idx], tf.float32) / 255.0
    dataset = tf.data.Dataset.from_tensor_slices(rep_data).batch(1)

    def representative_data_gen():
        for input_value in dataset.take(sample_size):
            yield [input_value]

    converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
    converter.representative_dataset = representative_data_gen
    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()
    open("MaskedLandMarkDetction_MobileNetV2_quant_fromKeras_v5.tflite", "wb").write(tflite_model_quant)

    print("Write quantization tflite done.")
else:
    print("Converting normal....")
    tflite_model = converter.convert()
    open("MaskedLandMarkDetction_MobileNetV2_fromKeras.tflite", "wb").write(tflite_model)
    print("Write tflite done.") 

X_train - мои данные для обучения, и я буду масштабировать значение входных изображений от 0 до 1 путем деления 255., поэтому я делаю то же самое в функциях representative_data_gen.

Мы будем очень благодарны за любую помощь, которую вы можете оказать.

Я использовал версию tenorflow: gpu 2.2.0

1 Ответ

2 голосов
/ 29 мая 2020

Похоже, api используется правильно. Не все модели гарантированно получат хорошую точность при посттренировочном квантовании. Например, задачи, требующие большей точности, или небольшие модели могут нести больше потерь.

Для этих более сложных задач мы рекомендуем использовать обучение с учетом квантования, которое доступно для моделей keras: https://www.tensorflow.org/model_optimization/guide/quantization/training.

...