Как найти плавающий выходной диапазон для квантованной операции matmul / conv2D - PullRequest
0 голосов
/ 26 октября 2018

Я новичок в тензорном потоке и квантовании, пытаюсь реализовать квантованную матричную операцию для двух входов int8. Было любопытно узнать математику за операцией. Я вижу, что в тензорном потоке они реализовали то же самое только для входов uint8, хотелось бы знать, как использовать это для подписанного int8 matmul / conv2D.

Точнее, я хотел бы знать, как получить диапазон выходных данных с плавающей запятой для операции matmul / conv2D.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 октября 2018

Я немного исследовал квантование в тензорном потоке и применил его для преобразования операций с плавающей запятой в квантовые операции.

В моем случае у меня все еще есть вход с плавающей точкой в ​​сеть.Входные данные квантуется прямо перед вводом количественных операций.Tensorflow предпочитает сохранять значения с плавающей точкой как можно дольше, чтобы быть совместимым с операциями с плавающей точкой.Это также причина того, почему тензор потока сохраняет минимальный и максимальный диапазоны с плавающей запятой после того, как входные данные с плавающей запятой квантованы в 8-битный целочисленный формат.Минимальное и максимальное значения с плавающей запятой в результате квантования также являются входными данными для квантовых операций.

В вашем случае операция Quant_conv2d свертывается с входными данными:

  • 8-битные данные без знакаквантизация формы
  • 8-битные значения ядра без знака

Выходные данные:

  • результат в виде 32 бит
  • новые мин и максдиапазон в виде значений с плавающей запятой

Новые диапазоны с плавающей запятой вычисляются из диапазонов значений ядра и диапазонов входных данных с использованием функции QuantificationRangeForMultiplication, указанной в:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/quantization_utils.h

Как уже говорилось, выходные данные являются 32-битными с минимальными и максимальными значениями с плавающей запятой для преобразования в абсолютные значения и возможного преобразования 8-битного квантованного формата обратно в плавающее.

Надеюсь, это поможет понять алгоритмы квантования Tensorflow.

...