Spec-Zone.ru › TensorFlow 1.15

tf.quantization.dequantize

Деквантизуйте тензор «input» в тензор с плавающей запятой.

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

Основные псевдонимы

`tf.dequantize`

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

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

tf.compat.v1.dequantize, tf.compat.v1.quantization.dequantize, `tf.compat.v2.quantization.dequantize`

tf.quantization.dequantize(
    input, min_range, max_range, mode='MIN_COMBINED', name=None
)

[min_range, max_range] — скалярные числа с плавающей запятой, которые задают диапазон для данных «input». Атрибут «mode» управляет тем, какие именно вычисления используются для преобразования значений с плавающей запятой в их квантованные эквиваленты.

В режиме «MIN_COMBINED» каждое значение тензора претерпевает следующее:

if T == qint8: in[i] += (range(T) + 1)/ 2.0
out[i] = min_range + (in[i]* (max_range - min_range) / range(T))

здесь range(T) = numeric_limits<T>::max() - numeric_limits<T>::min()

Пример режима MIN_COMBINED

Если вход поступает из QuantizedRelu6, тип выходного значения — quint8 (диапазон 0-255), но возможный диапазон QuantizedRelu6 — 0-6. Значения min_range и max_range, следовательно, равны 0,0 и 6,0. При деквантизации quint8 каждое значение преобразуется в число с плавающей запятой и умножается на 6 / 255. Обратите внимание, что если quantizedtype — qint8, операция дополнительно прибавляет к каждому значению 128 до преобразования в число с плавающей запятой.

Если режим — «MIN_FIRST», используется этот подход:

num_discrete_values = 1 << (# of bits in T)
range_adjust = num_discrete_values / (num_discrete_values - 1)
range = (range_max - range_min) * range_adjust
range_scale = range / num_discrete_values
const double offset_input = static_cast<double>(input) - lowest_quantized;
result = range_min + ((input - numeric_limits<T>::min()) * range_scale)

Пример режима SCALED

SCALED режим соответствует подходу к квантованию, используемому в QuantizeAndDequantize{V2|V3}.

Если режим — SCALED, мы не используем весь диапазон типа выходного значения, выбирая пропуск минимально возможного значения для симметрии (например, диапазон выходных значений — от -127 до 127, а не от -128 до 127 для знаковых 8-битных квантования), чтобы 0,0 соответствовало 0.

Сначала мы находим диапазон значений в нашем тензоре. Диапазон всегда центрирован на 0, поэтому мы находим m так, что

m = max(abs(input_min), abs(input_max))

Диапазон нашего входного тензора тогда [-m, m].

Затем мы выбираем наши квантованные ведра с фиксированной точкой, [min_fixed, max_fixed]. Если T со знаком, это

num_bits = sizeof(T) * 8
[min_fixed, max_fixed] =
    [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]

В противном случае, если T без знака, диапазон фиксированной точки

[min_fixed, max_fixed] = [0, (1 << num_bits) - 1]

Из этого мы вычисляем наш масштабирующий коэффициент, s:

s = (2 * m) / (max_fixed - min_fixed)

Теперь мы можем деквантизовать элементы нашего тензора:

result = input * s
Аргументы
input A Tensor. Должен быть одного из следующих типов: qint8, quint8, qint32, qint16, quint16.
min_range A Tensor типа float32. Минимальное скалярное значение, которое может быть получено для входа.
max_range A Tensor типа float32. Максимальное скалярное значение, которое может быть получено для входа.
mode Необязательный string из: "MIN_COMBINED", "MIN_FIRST", "SCALED". По умолчанию "MIN_COMBINED".
name Имя операции (необязательно).
Возвращаемое значение
A Tensor типа float32.

© 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/r1.15/api_docs/python/tf/quantization/dequantize

Spec-Zone.ru

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