Какие результаты я могу ожидать от квантованной модели Tensoflow?

У меня очень простая модель 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]

Что-то не так с квантовым преобразованием? И следует ли использовать в качестве входных данных целые числа с плавающей запятой?


person user1500986    schedule 30.08.2019    source источник


Ответы (2)


Модели небольшого размера, безусловно, пострадают от большого падения точности, когда вы выполняете квантование после обучения. Фактически, команда TensorFlow посоветовала выполнить проверку точности после применения посттренировочного квантования.

Если точность ухудшается, было предложено использовать _1 _.

На момент написания этого ответа обучение с учетом квантования еще не запущено.

person Prasad    schedule 30.08.2019

Я сам нашел проблему.

Репрезентативный набор данных, который я использовал для количественного преобразования, не был достаточно репрезентативным. Он состоял из массива нулей. Используя правильный набор данных (тот же, что использовался для обучения), исправлены выходные данные -> [[255 0 0]]

person user1500986    schedule 31.08.2019