Quantize

публичный финальный класс Quantize

Квантовать «входной» тензор типа float до «выходного» тензора типа «T».

[min_range, max_range] — скалярные числа с плавающей запятой, которые определяют диапазон для «входных» данных. Атрибут mode определяет, какие именно вычисления используются для преобразования значений с плавающей запятой в их квантованные эквиваленты. Атрибут round_mode определяет, какой алгоритм разрешения конфликтов используется при округлении значений с плавающей запятой до их квантованных эквивалентов.

В режиме «MIN_COMBINED» каждое значение тензора будет подвергаться следующим изменениям:

out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
 if T == qint8: out[i] -= (range(T) + 1) / 2.0
 
здесь `range(T) = numeric_limits ::max() - числовые_пределы ::мин()`

Пример режима MIN_COMBINED

Предположим, что ввод имеет тип float и имеет возможный диапазон [0,0, 6,0], а тип вывода — quint8 ([0, 255]). Значения min_range и max_range должны быть указаны как 0,0 и 6,0. Квантование от числа с плавающей запятой до quint8 умножит каждое входное значение на 255/6 и приведет к quint8.

Если тип вывода был qint8 ([-128, 127]), операция дополнительно вычитает каждое значение на 128 перед приведением, чтобы диапазон значений совпадал с диапазоном qint8.

Если режим «MIN_FIRST», то используется такой подход:

num_discrete_values = 1 << (# of bits in T)
 range_adjust = num_discrete_values / (num_discrete_values - 1)
 range = (range_max - range_min) * range_adjust
 range_scale = num_discrete_values / range
 quantized = round(input * range_scale) - round(range_min * range_scale) +
   numeric_limits<T>::min()
 quantized = max(quantized, numeric_limits<T>::min())
 quantized = min(quantized, numeric_limits<T>::max())
 
Самая большая разница между этим и MIN_COMBINED заключается в том, что минимальный диапазон сначала округляется, а затем вычитается из округленного значения. При использовании MIN_COMBINED вводится небольшое смещение, при котором повторяющиеся итерации квантования и деквантования будут приводить к все большей и большей ошибке.

Режим МАСШТАБИРОВАНИЕ Пример

Режим SCALED соответствует подходу квантования, используемому в QuantizeAndDequantize{V2|V3}`.

Если режим «SCALED», квантование выполняется путем умножения каждого входного значения на коэффициент масштабирования. Коэффициент масштабирования определяется из min_range и max_range так, чтобы он был как можно большим, чтобы диапазон от min_range до max_range был представлен в пределах значений типа T.

const int min_T = std::numeric_limits<T>::min();
   const int max_T = std::numeric_limits<T>::max();
   const float max_float = std::numeric_limits<float>::max();
 
   const float scale_factor_from_min_side =
       (min_T * min_range > 0) ? min_T / min_range : max_float;
   const float scale_factor_from_max_side =
       (max_T * max_range > 0) ? max_T / max_range : max_float;
 
   const float scale_factor = std::min(scale_factor_from_min_side,
                                       scale_factor_from_max_side);
 
Затем мы используем коэффициент масштабирования для настройки min_range и max_range следующим образом:
min_range = min_T / scale_factor;
       max_range = max_T / scale_factor;
 
например, если T = qint8 и изначально min_range = -10 и max_range = 9, мы бы сравнили -128/-10,0 = 12,8 с 127/9,0 = 14,11 и установили scaling_factor = 12,8. В этом случае min_range останется -10, но max_range будет скорректирован до 127/12,8 = 9,921875

Поэтому мы будем квантовать входные значения в диапазоне от (-10, 9,921875) до (-128, 127).

Входной тензор теперь можно квантовать, урезав значения до диапазона от мин_диапазона до макс_диапазона, а затем умножив на масштабный_коэффициент следующим образом:

result = round(min(max_range, max(min_range, input)) * scale_factor)
 
Скорректированные min_range и max_range возвращаются как выходные данные 2 и 3 этой операции. Эти выходные данные следует использовать в качестве диапазона для любых дальнейших расчетов.

Атрибут узкого_диапазона (логическое значение)

Если это правда, мы не используем минимальное квантованное значение. т.е. для int8 квантованного вывода он будет ограничен диапазоном -127..127 вместо полного диапазона -128..127. Это предусмотрено для совместимости с некоторыми механизмами вывода. (Применимо только к режиму МАСШТАБИРОВАНИЕ)

Атрибут оси (int)

Необязательный атрибут «ось» может указывать индекс измерения входного тензора, так что диапазоны квантования будут рассчитываться и применяться отдельно для каждого среза тензора вдоль этого измерения. Это полезно для поканального квантования.

Если указана ось, min_range и max_range.

если `axis`=None, потензорное квантование выполняется как обычно.

Атрибут обеспечения_минимального_диапазона (с плавающей запятой)

Обеспечивает, чтобы минимальный диапазон квантования был не ниже этого значения. Устаревшее значение по умолчанию — 0,01, но для новых применений настоятельно рекомендуется установить его на 0.

Вложенные классы

сорт Квантизация.Параметры Дополнительные атрибуты для Quantize

Константы

Нить OP_NAME Название этой операции, известное основному движку TensorFlow.

Публичные методы

статический Quantize.Options
ось (длинная ось)
static <T расширяет TType > Квантовать <T>
create ( Область действия , Операнд < TFloat32 > ввод, Операнд < TFloat32 > minRange, Операнд < TFloat32 > maxRange, Класс <T> T, Опции... опции)
Фабричный метод для создания класса, обертывающего новую операцию квантования.
статический Quantize.Options
обеспеченияМинимумРанге (Float ОбеспечениеМинимумРанге)
статический Quantize.Options
режим (строковый режим)
статический Quantize.Options
узкий диапазон (логическое значение узкого диапазона)
Выход <Т>
выход ()
Квантованные данные, полученные из входных данных с плавающей запятой.
Вывод <TFloat32>
выходМакс ()
Максимальный окончательный диапазон квантования, используемый для обрезки входных значений перед их масштабированием и округлением до квантованных значений.
Вывод <TFloat32>
выходМин ()
Минимальный окончательный диапазон квантования, используемый для обрезки входных значений перед их масштабированием и округлением до квантованных значений.
статический Quantize.Options
roundMode (строка roundMode)

Унаследованные методы

org.tensorflow.op.RawOp
последнее логическое значение
равно (Объект obj)
окончательный интервал
Операция
оп ()
Верните эту единицу вычислений как одну Operation .
последняя строка
логическое значение
равно (Объект arg0)
последний класс<?>
получитьКласс ()
интервал
хэш-код ()
окончательная пустота
уведомить ()
окончательная пустота
уведомитьВсе ()
Нить
toString ()
окончательная пустота
подождать (длинный arg0, int arg1)
окончательная пустота
подождите (длинный arg0)
окончательная пустота
ждать ()
org.tensorflow.op.Op
абстрактная среда выполнения
окружение ()
Верните среду выполнения, в которой была создана эта операция.
абстрактная операция
оп ()
Верните эту единицу вычислений как одну Operation .

Константы

общедоступная статическая финальная строка OP_NAME

Название этой операции, известное основному движку TensorFlow.

Постоянное значение: «QuantizeV2».

Публичные методы

общедоступная статическая ось Quantize.Options (длинная ось)

public static Quantize <T> create (область области действия , операнд <TFloat32> ввод, операнд < TFloat32 > minRange, операнд < TFloat32 > maxRange, класс<T> T, параметры... параметры)

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

Параметры
объем текущий объем
миндиапазон Минимальное значение диапазона квантования. Это значение может быть скорректировано оператором в зависимости от других параметров. Скорректированное значение записывается в `output_min`. Если указан атрибут «ось», это должен быть одномерный тензор, размер которого соответствует размерности «оси» входного и выходного тензоров.
МаксДиапазон Максимальное значение диапазона квантования. Это значение может быть скорректировано оператором в зависимости от других параметров. Скорректированное значение записывается в `output_max`. Если указан атрибут «ось», это должен быть одномерный тензор, размер которого соответствует размерности «оси» входного и выходного тензоров.
параметры содержит значения необязательных атрибутов
Возврат
  • новый экземпляр Quantize

общедоступный статический Quantize.Options SureMinimumRange (Float обеспеченияMinimumRange)

общедоступный статический режим Quantize.Options (режим String)

public static Quantize.Options узкий диапазон (логическое значение узкого диапазона)

публичный вывод <T> вывод ()

Квантованные данные, полученные из входных данных с плавающей запятой.

публичный вывод <TFloat32> outputMax ()

Максимальный окончательный диапазон квантования, используемый для обрезки входных значений перед их масштабированием и округлением до квантованных значений. Если указан атрибут «ось», это будет одномерный тензор, размер которого соответствует размерности «оси» входного и выходного тензоров.

публичный вывод <TFloat32> outputMin ()

Минимальный окончательный диапазон квантования, используемый для обрезки входных значений перед их масштабированием и округлением до квантованных значений. Если указан атрибут «ось», это будет одномерный тензор, размер которого соответствует размерности «оси» входного и выходного тензоров.

public static Quantize.Options roundMode (String roundMode)