тензорный поток:: опс:: Квантизация и деквантизация V2
#include <array_ops.h>
Квантует, а затем деквантует тензор.
Краткое содержание
Эта операция имитирует потерю точности из-за квантованного прямого прохода:
- Квантование тензора до чисел с фиксированной точкой, которые должны соответствовать целевому методу квантования, когда он используется в выводе.
- Деквантование его обратно в числа с плавающей запятой для следующих операций, скорее всего, matmul.
Существуют разные способы квантования. В этой версии используется только масштабирование, поэтому 0,0 соответствует 0.
Из указанного «num_bits» в типе квантованного вывода он определяет минимальные и максимальные представимые квантованные значения.
например
- [-128, 127] для подписанных, num_bits = 8 или
- [0, 255] для беззнакового числа, num_bits = 8.
Если range_given == False, начальные значения input_min, input_max будут определены автоматически как минимальное и максимальное значения во входном тензоре, в противном случае используются указанные значения input_min, input_max.
Примечание. Если указаны input_min, input_max, они не обязательно должны равняться фактическому минимальному и максимальному значениям в тензоре. например, в некоторых случаях может быть полезно указать эти значения таким образом, чтобы отсекались экстремумы с низкой вероятностью входного распределения.
Эта операция определяет максимальный коэффициент масштабирования, который будет отображать начальный диапазон [input_min, input_max] в диапазон, который находится в пределах представимого квантованного диапазона.
Он определяет масштаб по одному из input_min и input_max, а затем обновляет другой, чтобы максимизировать представимый диапазон.
например
- если выходные данные подписаны, num_bits = 8, [input_min, input_max] = [-10,0, 5,0]: будет использоваться коэффициент масштабирования -128/-10,0 = 12,8. В этом случае будет обновлено input_max до 127/12,8 = 9.921875
- если выходные данные подписаны, num_bits = 8, [input_min, input_max] = [-10,0, 10,0]: будет использоваться коэффициент масштабирования 127/10,0 = 12,7. В этом случае будет обновлено input_min до 128,0/12,7 = -10,07874.
- если выходные данные беззнаковые, входной_мин принудительно устанавливается равным 0, и используется только указанный входной_макс.
После определения коэффициента масштабирования и обновления входного диапазона он применяет следующее к каждому значению во «входном» тензоре.
выход = круглый (зажим (значение, входной_мин, входной_макс) * масштабный_коэффициент) / масштабный_коэффициент.
Вышеупомянутая функция округления округляет значение на основе заданного round_mode.
Аргументы:
- область: объект области.
- ввод: Тензор для квантования, а затем деквантования.
- input_min: Если
range_given == True
, это указывает минимальное входное значение, которое необходимо представить, в противном случае оно определяется на основе минимального значенияinput
тензора. - input_max: Если
range_given == True
, это указывает максимальное входное значение, которое необходимо представить, в противном случае оно определяется на основе максимального значенияinput
тензора.
Необязательные атрибуты (см. Attrs
):
- Signed_input: является ли квантование знаковым или беззнаковым. (на самом деле этот параметр должен был называться
signed_output
) - num_bits: разрядность квантования.
- range_given: указан ли диапазон или он должен определяться на основе
input
тензора. - round_mode: Атрибут round_mode определяет, какой алгоритм разрешения конфликтов округления используется при округлении значений с плавающей запятой до их квантованных эквивалентов. В настоящее время поддерживаются следующие режимы округления:
- HALF_TO_EVEN: это режим round_mode по умолчанию.
- HALF_UP: округление в сторону положительного значения. В этом режиме 7,5 округляет до 8 и -7,5 округляет до -7.
- узкий_диапазон: если True, то абсолютное значение квантованного минимального значения совпадает с квантованным максимальным значением, а не на 1 больше. т.е. для 8-битного квантования минимальное значение составляет -127 вместо -128.
- Ось: Если указано, эта ось рассматривается как ось канала или среза, и для каждого канала или среза вдоль этой оси используется отдельный диапазон квантования.
Возврат:
-
Output
: выходной тензор.
Конструкторы и деструкторы | |
---|---|
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max) | |
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs) |
Публичные атрибуты | |
---|---|
operation | |
output |
Общественные функции | |
---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const |
Публичные статические функции | |
---|---|
Axis (int64 x) | |
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) |
Структуры | |
---|---|
tensorflow::ops::QuantizeAndDequantizeV2::Attrs | Дополнительные установщики атрибутов для QuantizeAndDequantizeV2 . |
Публичные атрибуты
операция
Operation operation
выход
::tensorflow::Output output
Общественные функции
Квантизация и деквантизация V2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
Квантизация и деквантизация V2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs )
узел
::tensorflow::Node * node() const
оператор::tensorflow::Input
operator::tensorflow::Input() const
оператор::tensorflow::Выход
operator::tensorflow::Output() const
Публичные статические функции
Ось
Attrs Axis( int64 x )
Узкий диапазон
Attrs NarrowRange( bool x )
Число битов
Attrs NumBits( int64 x )
Диапазонданный
Attrs RangeGiven( bool x )
Круглый режим
Attrs RoundMode( StringPiece x )
SignedInput
Attrs SignedInput( bool x )