tensorflow::ops::QuantizeAndDequantizeV2
#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, они не обязательно должны совпадать с фактическими минимальным и максимальным значениями в тензоре. Например, в некоторых случаях может быть полезно задать эти значения так, чтобы отсечь маловероятные крайние значения распределения входных данных.
Эта операция определяет максимальный scale_factor, который позволяет отобразить исходный диапазон [input_min, input_max] в диапазон, находящийся в пределах представимого квантованного диапазона.
Она определяет масштаб по одному из значений input_min и input_max, а затем обновляет другое значение, чтобы максимально увеличить представимый диапазон.
Например:
- если выходное значение знаковое, num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: будет использоваться scale_factor, равный -128 / -10.0 = 12.8. В этом случае input_max будет обновлено до 127 / 12.8 = 9.921875
- если выходное значение знаковое, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: будет использоваться scale_factor, равный 127 / 10.0 = 12.7. В этом случае input_min будет обновлено до 128.0 / 12.7 = -10.07874
- если выходное значение беззнаковое, input_min принудительно устанавливается в 0, и используется только заданное значение input_max.
После определения scale_factor и обновления диапазона входных значений для каждого значения в тензоре 'input' выполняется следующее:
output = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.
Приведенная выше функция round округляет значение в соответствии с заданным round_mode.
Аргументы:
- scope: объект Scope
- input: Tensor, который нужно квантовать, а затем выполнить его обратное квантование.
- 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.
- axis: если задана, эта ось рассматривается как ось канала или среза, а для каждого канала или среза вдоль этой оси используется отдельный диапазон квантования.
Возвращает:
-
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 operation
output
::tensorflow::Output output
Публичные функции
QuantizeAndDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
QuantizeAndDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs )
node
::tensorflow::Node * node() const
operator::tensorflow::Input
operator::tensorflow::Input() const
operator::tensorflow::Output
operator::tensorflow::Output() const
Публичные статические функции
Axis
Attrs Axis( int64 x )
NarrowRange
Attrs NarrowRange( bool x )
NumBits
Attrs NumBits( int64 x )
RangeGiven
Attrs RangeGiven( bool x )
RoundMode
Attrs RoundMode( StringPiece x )
SignedInput
Attrs SignedInput( bool x )
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/cc/class/tensorflow/ops/quantize-and-dequantize-v2