У меня очень простая модель Tensorflow, которая выводит 3 значения (слева, прямо, справа) на основе ввода от 6 датчиков (диапазон ввода от 0,0 до 1,0)
inputSensor = Input(shape=(3))
modelSensor = Dense(32, activation="relu")(inputSensor)
modelSensor = Dense(32, activation="relu")(modelSensor)
modelSensor = Dense(numClasses, activation="softmax")(modelSensor)
model = Model(inputs=inputSensor, outputs=modelSensor)
После обучения модели я могу преобразовать ее в обычную модель TFLite, используя
converter = tf.compat.v1.lite.TFLiteConverter.from_keras_model_file("models/modelpath.h5")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert ()
Затем я провожу несколько тестов вывода на модели и получаю ожидаемые результаты. Один из трех выходов - 99%, остальные - очень низкие.
ТЕСТ ПРАВЫЙ Ввод [0,0,0,0,1,0] Результат [[0,00089144 0,00154889 0,99755967]]
ТЕСТ Прямой ввод [0,0,1,0,0,0] Результат [[0,00087439 0,996424 0,00270158]]
ТЕСТ ЛЕВЫЙ Вход [1.0,0.0,0.0] Результат [[0.9948014 0.00256803 0.00263061]]
Затем я квантую модель (чтобы использовать ее на граничном TPU).
converter =tf.compat.v1.lite.TFLiteConverter. from_keras_model_file
("models/modelpath.h5")
converter.representative_dataset = representativeDataset_gen
converter.target_spec.supported_ops =
[tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
converter.optimizations = [tf.lite.Optimize.DEFAULT]
и я провожу тот же тест, что и выше. Результаты все еще верны, но я получаю 132 на максимальной мощности и 62 на остальных.
ТЕСТ ПРАВЫЙ Вход [0.0,0.0,1.0] [[62 62 132]]
ТЕСТ Прямой ввод [0.0,1.0,0.0] [[62 132 62]]
ТЕСТ ЛЕВЫЙ Вход [1.0,0.0,0.0] [[132 62 62]]
Я ожидал получить результат в диапазоне [[255 0 0]]
То же самое происходит, когда я использую целочисленные входы, такие как Input [0,0,255]
Что-то не так с квантовым преобразованием? И следует ли использовать в качестве входных данных целые числа с плавающей запятой?