tensorflow::ops::QuantizeAndDequantizeV2
#include <array_ops.h>Затем тензор квантуется, после чего происходит его деквантование.
Краткое содержание
Эта операция имитирует потерю точности при квантованном прямом проходе путем:
- Квантование тензора числами с фиксированной запятой, которое должно соответствовать целевому методу квантования при его использовании в процессе вывода.
- Для последующих операций, скорее всего, для вычисления матричных чисел, выполните обратное квантование в числа с плавающей запятой.
Существуют разные способы квантования. В этой версии используется только масштабирование, поэтому 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.
- Если выходное значение беззнаковое, input_min принудительно устанавливается равным 0, и используется только указанное значение input_max.
После определения масштабного коэффициента и обновления диапазона входных данных к каждому значению во входном тензоре применяется следующее.
output = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.
Приведенная выше функция округления округляет значение в соответствии с заданным режимом округления (round_mode).
Аргументы:
- scope: Объект Scope
- Входные данные: тензор для квантования, а затем для деквантования.
- 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: это режим раунда по умолчанию.
- HALF_UP: округление в сторону положительных значений. В этом режиме 7,5 округляется до 8, а -7,5 — до -7.
- narrow_range: Если 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 | |
Открытые статические функции | |
|---|---|
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::Output
operator::tensorflow::Output() const
Открытые статические функции
Узкий диапазон
Attrs NarrowRange( bool x )
NumBits
Attrs NumBits( int64 x )
RangeGiven
Attrs RangeGiven( bool x )
Круглый режим
Attrs RoundMode( StringPiece x )
SignedInput
Attrs SignedInput( bool x )