Пакетная нормализация Quantize Tensorflow 1.x не имеет информации MinMax

Слой (....), который является входом для оператора Conv, создающего модель выходного массива /re_lu_1/Relu, не имеет данных min/max, которые необходимы для квантования. Если точность имеет значение, либо нацельтесь на неквантованный выходной формат, либо запустите квантованное обучение с вашей моделью из контрольной точки с плавающей запятой, чтобы изменить входной график, чтобы он содержал информацию о минимуме / максимуме. Если вас не волнует точность, вы можете передать --default_ranges_min= и --default_ranges_max= для упрощения экспериментов.

1 ответ

Для tensorflow 1.x, если вы хотите квантовать, вы должны поместить его с поддельными узлами квантования, чтобы активировать квантование модели. Есть 3 фазы квантования:

  1. Учебная часть: загрузите вашу модель в график => создайте тренировочный график с помощью contrib => обучите и сохраните веса ckpt
  2. Оценочная часть: загрузите вашу модель в график без весов => создайте оценочный график => восстановите график => экспорт в замороженную модель
  3. Toco/tflite конвертирует замороженную модель в квантованную модель

Однако наиболее важным фактором является конфигурация batch_normalization в модели. После попытки нескольких конфигураций лучше всего использовать batch_normalization без объединенной опции изtensorflow.keras.layers. Этот слой следует прикреплять только подtensorflow.keras.layers.Conv2D с разобранным параметром активации.

Если вы проведете описанный выше процесс, слой не выдаст ошибок. does not have MinMax information

Ниже приведено неверное изображение, отсутствует поддельное квантование в RELU.

Правильный