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 указаны, они не обязательно должны быть равны фактическим минимальному и максимальному значениям в тензоре. Например, в некоторых случаях может быть полезно указать эти значения таким образом, чтобы низковероятные крайние значения распределения входных данных были обрезаны.
Этот оператор определяет максимальный коэффициент масштабирования, который отобразит начальный диапазон [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.
После определения коэффициента масштабирования и обновления диапазона входных данных он применяет следующее к каждому значению в тензоре 'input'.
output = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.
Функция round выше округляет значение в соответствии с заданным режимом округления.
Args:
- scope: Объект Scope
- input: Тензор для квантования и последующего деквантования.
- 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.
- 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
выход
::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 )
узел
::tensorflow::Node * node() const
оператор::tensorflow::Вход
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 )
Знаковый вход
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/versions/r2.9/api_docs/cc/class/tensorflow/ops/quantize-and-dequantize-v2