Spec-Zone.ru › TensorFlow

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 заданы, они не должны совпадать с фактическими минимальным и максимальным значениями тензора. Например, в некоторых случаях может быть полезно задать эти значения так, чтобы обрезать маловероятные крайние значения распределения входных данных.

Эта операция определяет максимальный 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.

Аргументы
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.

© 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/python/tf/raw_ops/QuantizeAndDequantizeV2

Spec-Zone.ru

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