Я пытаюсь преобразовать свою модель keras в квантованную модель tflite, чтобы я мог запустить свою модель на коралловом TPU, но результаты моей модели keras и модели tflite значительно отличаются.
Красные точки - это квантованные выходные данные модели tflite, а синие точки - исходные выходные данные модели keras.
Вот мой код для преобразования модели 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