Как найти диапазон вывода с плавающей запятой для квантованной операции matmul / conv2d

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

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

Любая помощь будет высоко ценится.

0
0
237
1

Ответы 1

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

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

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

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

Выходы:

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

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

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

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

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

Привет, Уильям! Большое спасибо за то, что поделились своим мнением. Я изучил, как tenorflow реализовал QuantizationRangeForMultiplication, и заметил, что он работает для входов uint8, но мне хотелось того же для входов int8. Я не был уверен в математике, стоящей за этим. Был бы очень рад, если бы вы помогли мне разобраться в математике, чтобы QuantizationRangeForMultiplication работал и для входов int8.

Abhinav George 01.11.2018 17:04

Другие вопросы по теме