Spec-Zone.ru › TensorFlow 2.4

tf.raw_ops.QuantizeAndDequantizeV2

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

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.raw_ops.QuantizeAndDequantizeV2

tf.raw_ops.QuantizeAndDequantizeV2(
    input, input_min, input_max, signed_input=True, num_bits=8, range_given=False,
    round_mode='HALF_TO_EVEN', narrow_range=False, axis=-1, name=None
)

Этот оператор моделирует потерю точности при квантованном прямом проходе, выполняя следующие действия:

  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
  • Если выходной тип беззнаковый, input_min принудительно устанавливается в 0, и используется только указанный input_max.

После определения коэффициента масштабирования и обновления входного диапазона он применяет следующее к каждому значению в тензоре 'input'.

output = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.

Функция round округляет значение в соответствии с заданным режимом округления.

Аргументы
input A Tensor. Должен быть одним из следующих типов: bfloat16, half, float32, float64. Тензор для квантования и последующего деквантования.
input_min A Tensor. Должен иметь тот же тип, что и input. Если range_given == True, это определяет минимальное входное значение, которое нужно представить, в противном случае оно определяется из минимального значения тензора input.
input_max A Tensor. Должен иметь тот же тип, что и input. Если range_given == True, это определяет максимальное входное значение, которое нужно представить, в противном случае оно определяется из максимального значения тензора input.
signed_input Необязательный bool. По умолчанию True. Определяет, является ли квантование знаковым или беззнаковым. (на самом деле этот параметр должен был называться signed_output)
num_bits Необязательный int. По умолчанию 8. Разрядность квантования.
range_given Необязательный bool. По умолчанию False. Указывает, задан ли диапазон или должен быть определен из тензора input.
round_mode Необязательный string из: "HALF_TO_EVEN", "HALF_UP". По умолчанию "HALF_TO_EVEN". Атрибут 'round_mode' управляет алгоритмом выбора привязки при округленнии значений с плавающей точкой до их квантованных эквивалентов. В настоящее время поддерживаются следующие режимы округления:
  • HALF_TO_EVEN: это режим округления по умолчанию.
  • HALF_UP: округление в сторону положительного значения. В этом режиме 7,5 округляется до 8, а -7,5 — до -7.
narrow_range Необязательный bool. По умолчанию False. Если True, то абсолютное значение минимального квантованного значения совпадает с максимальным квантованным значением, а не на 1 больше. Т.е. для квантования 8 бит минимальное значение равно -127, а не -128.
axis Необязательный int. По умолчанию -1. Если указано, эта ось обрабатывается как ось канала или среза, и для каждого канала или среза вдоль этой оси используется отдельный диапазон квантования.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor. Имеет тот же тип, что и input.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/raw_ops/QuantizeAndDequantizeV2

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API