Назначение дополнительных параметров в узлах квантования обучения TensorFlow Quantization Aware Training - PullRequest
0 голосов
/ 06 мая 2020

В настоящее время я пытаюсь понять обучение с учетом квантования в TensorFlow. Я понимаю, что поддельные узлы квантования требуются для сбора динамической c информации о диапазоне в качестве калибровки для операции квантования. Когда я сравниваю одну и ту же модель один раз в качестве «простой» модели Кераса и один раз в качестве модели с учетом квантования, последняя имеет больше параметров, что имеет смысл, поскольку нам нужно сохранять минимальные и максимальные значения для активации во время обучения с учетом квантования.

Рассмотрим следующий пример:

import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.models import Model
def get_model(in_shape):
  inpt = layers.Input(shape=in_shape)
  dense1 = layers.Dense(256, activation="relu")(inpt)
  dense2 = layers.Dense(128, activation="relu")(dense1)
  out = layers.Dense(10, activation="softmax")(dense2)

  model = Model(inpt, out)

  return model

Модель имеет следующую сводку:

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer)         [(None, 784)]             0         
_________________________________________________________________
dense_3 (Dense)              (None, 256)               200960    
_________________________________________________________________
dense_4 (Dense)              (None, 128)               32896     
_________________________________________________________________
dense_5 (Dense)              (None, 10)                1290      
=================================================================
Total params: 235,146
Trainable params: 235,146
Non-trainable params: 0
_________________________________________________________________

Однако, если я сделаю оптимизацию моей модели, она напечатает следующее Резюме:

import tensorflow_model_optimization as tfmot

quantize_model = tfmot.quantization.keras.quantize_model

# q_aware stands for for quantization aware.
q_aware_model = quantize_model(standard)

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer)         [(None, 784)]             0         
_________________________________________________________________
quantize_layer (QuantizeLaye (None, 784)               3         
_________________________________________________________________
quant_dense_3 (QuantizeWrapp (None, 256)               200965    
_________________________________________________________________
quant_dense_4 (QuantizeWrapp (None, 128)               32901     
_________________________________________________________________
quant_dense_5 (QuantizeWrapp (None, 10)                1295      
=================================================================
Total params: 235,164
Trainable params: 235,146
Non-trainable params: 18
_________________________________________________________________

У меня есть два вопроса, в частности:

  1. Какова цель quantize_layer с 3 параметрами после входного слоя?
  2. Почему у нас есть 5 дополнительных необучаемых параметров на каждый слой и для чего они используются?

Я ценю любые подсказки или дополнительные материалы, которые помогают мне (и другим, кто сталкивается с этим вопросом) понять квантование осознанное обучение.

1 Ответ

1 голос
/ 11 мая 2020
  1. Слой квантования используется для преобразования входных данных с плавающей запятой в int8. Параметры квантования используются для вычислений мин / макс и нулевой точки вывода.

  2. Квантованные плотные слои нуждаются в нескольких дополнительных параметрах: мин / макс для ядра и мин / макс / нулевая точка для активация выхода.

...