Квантовать «входной» тензор типа 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
Пример режима 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())
Режим МАСШТАБИРОВАНИЕ Пример
Режим 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 = min_T / scale_factor;
max_range = max_T / scale_factor;
Поэтому мы будем квантовать входные значения в диапазоне от (-10, 9,921875) до (-128, 127).
Входной тензор теперь можно квантовать, урезав значения до диапазона от мин_диапазона до макс_диапазона, а затем умножив на масштабный_коэффициент следующим образом:
result = round(min(max_range, max(min_range, input)) * scale_factor)
Атрибут узкого_диапазона (логическое значение)
Если это правда, мы не используем минимальное квантованное значение. т.е. для 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> | |
статический Quantize.Options | обеспеченияМинимумРанге (Float ОбеспечениеМинимумРанге) |
статический Quantize.Options | режим (строковый режим) |
статический Quantize.Options | узкий диапазон (логическое значение узкого диапазона) |
Выход <Т> | выход () Квантованные данные, полученные из входных данных с плавающей запятой. |
Вывод <TFloat32> | выходМакс () Максимальный окончательный диапазон квантования, используемый для обрезки входных значений перед их масштабированием и округлением до квантованных значений. |
Вывод <TFloat32> | выходМин () Минимальный окончательный диапазон квантования, используемый для обрезки входных значений перед их масштабированием и округлением до квантованных значений. |
статический Quantize.Options | roundMode (строка roundMode) |
Унаследованные методы
Константы
общедоступная статическая финальная строка OP_NAME
Название этой операции, известное основному движку TensorFlow.
Публичные методы
public static Quantize <T> create (область области действия , операнд <TFloat32> ввод, операнд < TFloat32 > minRange, операнд < TFloat32 > maxRange, класс<T> T, параметры... параметры)
Фабричный метод для создания класса, обертывающего новую операцию квантования.
Параметры
объем | текущий объем |
---|---|
миндиапазон | Минимальное значение диапазона квантования. Это значение может быть скорректировано оператором в зависимости от других параметров. Скорректированное значение записывается в `output_min`. Если указан атрибут «ось», это должен быть одномерный тензор, размер которого соответствует размерности «оси» входного и выходного тензоров. |
МаксДиапазон | Максимальное значение диапазона квантования. Это значение может быть скорректировано оператором в зависимости от других параметров. Скорректированное значение записывается в `output_max`. Если указан атрибут «ось», это должен быть одномерный тензор, размер которого соответствует размерности «оси» входного и выходного тензоров. |
параметры | содержит значения необязательных атрибутов |
Возврат
- новый экземпляр Quantize
публичный вывод <TFloat32> outputMax ()
Максимальный окончательный диапазон квантования, используемый для обрезки входных значений перед их масштабированием и округлением до квантованных значений. Если указан атрибут «ось», это будет одномерный тензор, размер которого соответствует размерности «оси» входного и выходного тензоров.
публичный вывод <TFloat32> outputMin ()
Минимальный окончательный диапазон квантования, используемый для обрезки входных значений перед их масштабированием и округлением до квантованных значений. Если указан атрибут «ось», это будет одномерный тензор, размер которого соответствует размерности «оси» входного и выходного тензоров.