#tensorflow #tensorflow-lite #quantization
Вопрос:
Преобразование модели TFLite позволяет автоматически квантовать или деквантировать входы или выходы модели. Вы можете сделать это, установив inference_input_type
и inference_output_type
соответствующим образом, как это.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
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
Однако, согласно TensorFlow 2.7, модели TFLite, наконец, поддерживают несколько подписей. Они могут быть автоматически извлечены из сохраненных моделей, моделей Keras или из конкретных функций. Однако в связи с этим возникает вопрос: как вы можете установить квантование/деквантизацию для входов и выходов на уровне подписи? Более того, как вы это делаете, если подпись имеет несколько входов или выходов?
Похоже inference_input_type
, и inference_output_type
они довольно ограничены каким-либо одним входом (может быть, также одним выходом?) функция модель экспортируется с помощью метода вызова. Любые советы о том, как обрабатывать квантование/деквантиз для конкретных аргументов в разных сигнатурах, даже если они выполняются вручную, были бы весьма кстати.
Комментарии:
1. Небольшое обновление. Я обнаружил, что в случае нескольких подписей подпись, на которую нацелена
representative_dataset
(и я бы предположил, что такжеinference_input_type
иinference_output_type
), является первой в алфавитном порядке , даже если вы конвертируете из списка конкретных функций. Это зависит от названий ваших функций. Разработчики TF: это действительно нуждается в улучшении дизайна.
Ответ №1:
Конвертер TensorFlow Lite также может квантовать несколько моделей с поддержкой сигнатур. Переопределение ввода/вывода также работает для них.
def representative_dataset():
# Feed data set for the "encode" signature.
for data in encode_signature_dataset:
yield (
"encode", {
"image": data.image,
"bias": data.bias,
}
)
# Feed data set for the "decode" signature.
for data in decode_signature_dataset:
yield (
"decode", {
"image": data.image,
"hint": data.hint,
},
)
Смотрите подробности по адресу https://www.tensorflow.org/lite/performance/post_training_quantization#full_integer_quantization
Комментарии:
1. Значит, либо все аргументы квантованы, либо их нет? Вопросы о квантовании только одной сигнатуры и о том, как определяется, какую из них квантовать (по-видимому, по алфавитному порядку имен), все еще остаются.