Пакетная нормализация Quantize Tensorflow 1.x не имеет информации MinMax
Слой (....), который является входом для оператора Conv, создающего модель выходного массива /re_lu_1/Relu, не имеет данных min/max, которые необходимы для квантования. Если точность имеет значение, либо нацельтесь на неквантованный выходной формат, либо запустите квантованное обучение с вашей моделью из контрольной точки с плавающей запятой, чтобы изменить входной график, чтобы он содержал информацию о минимуме / максимуме. Если вас не волнует точность, вы можете передать --default_ranges_min= и --default_ranges_max= для упрощения экспериментов.
1 ответ
Для tensorflow 1.x, если вы хотите квантовать, вы должны поместить его с поддельными узлами квантования, чтобы активировать квантование модели. Есть 3 фазы квантования:
- Учебная часть: загрузите вашу модель в график => создайте тренировочный график с помощью contrib => обучите и сохраните веса ckpt
- Оценочная часть: загрузите вашу модель в график без весов => создайте оценочный график => восстановите график => экспорт в замороженную модель
- Toco/tflite конвертирует замороженную модель в квантованную модель
Однако наиболее важным фактором является конфигурация batch_normalization в модели. После попытки нескольких конфигураций лучше всего использовать batch_normalization без объединенной опции изtensorflow.keras.layers
. Этот слой следует прикреплять только подtensorflow.keras.layers.Conv2D
с разобранным параметром активации.
Если вы проведете описанный выше процесс, слой не выдаст ошибок. does not have MinMax information
Ниже приведено неверное изображение, отсутствует поддельное квантование в RELU.
Правильный