tensorflow::ops::QuantizeAndDequantizeV2

#include <array_ops.h>

Затем тензор квантуется, после чего происходит его деквантование.

Краткое содержание

Эта операция имитирует потерю точности при квантованном прямом проходе путем:

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

Существуют разные способы квантования. В этой версии используется только масштабирование, поэтому 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
)