тензорный поток:: опс:: Квантизация и деквантизация V2

#include <array_ops.h>

Квантует, а затем деквантует тензор.

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

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

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

Публичные статические функции

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 NarrowRange(
  bool x
)

Число битов

Attrs NumBits(
  int64 x
)

Диапазонданный

Attrs RangeGiven(
  bool x
)

Круглый режим

Attrs RoundMode(
  StringPiece x
)

SignedInput

Attrs SignedInput(
  bool x
)