tensorflow :: operaciones :: Descuantizar

#include <array_ops.h>

Descuantizar el tensor de 'entrada' en un tensor flotante.

Resumen

[rango_mín, rango_máx] son ​​flotantes escalares que especifican el rango para los datos de 'entrada'. El atributo 'modo' controla exactamente qué cálculos se utilizan para convertir los valores flotantes en sus equivalentes cuantificados.

En el modo 'MIN_COMBINED', cada valor del tensor pasará por lo siguiente:

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

Ejemplo de modo MIN_COMBINED

Si la entrada proviene de QuantizedRelu6 , el tipo de salida es quint8 (rango de 0-255) pero el rango posible de QuantizedRelu6 es 0-6. Por lo tanto, los valores min_range y max_range son 0.0 y 6.0. Dequantize en quint8 tomará cada valor, se convertirá en flotante y se multiplicará por 6 / 255. Tenga en cuenta que si el tipo cuantizado es qint8, la operación agregará adicionalmente cada valor por 128 antes de la conversión.

Si el modo es 'MIN_FIRST', se utiliza este enfoque:

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(input) - lowest_quantized;
result = range_min + ((input - numeric_limits::min()) * range_scale)

Ejemplo de modo ESCALADO

SCALED modo SCALED coincide con el enfoque de cuantificación utilizado en QuantizeAndDequantize{V2|V3} .

Si el modo es SCALED , no usamos el rango completo del tipo de salida, eligiendo elidir el valor más bajo posible para la simetría (por ejemplo, el rango de salida es -127 a 127, no -128 a 127 para cuantificación de 8 bits con signo) de modo que 0.0 se asigna a 0.

Primero encontramos el rango de valores en nuestro tensor. El rango que usamos siempre se centra en 0, por lo que encontramos m tal que

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

Nuestro rango de tensor de entrada es entonces [-m, m] .

A continuación, elegimos nuestros cubos de cuantificación de punto fijo, [min_fixed, max_fixed] . Si T está firmado, esto es

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

De lo contrario, si T no está firmado, el rango de punto fijo es

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

A partir de esto, calculamos nuestro factor de escala, s:

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

Ahora podemos descuantificar los elementos de nuestro tensor:

result = input * s

Argumentos:

  • alcance: un objeto de alcance
  • min_range: El valor escalar mínimo que posiblemente se produzca para la entrada.
  • max_range: el valor escalar máximo que se puede producir para la entrada.

Devoluciones:

  • Output : el tensor de salida.

Constructores y Destructores

Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range)
Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, const Dequantize::Attrs & attrs)

Atributos públicos

operation
output

Funciones publicas

node () const
::tensorflow::Node *
operator::tensorflow::Input () const
operator::tensorflow::Output () const

Funciones estáticas públicas

Mode (StringPiece x)

Estructuras

tensorflow :: ops :: Dequantize :: Attrs

Establecedores de atributos opcionales para Dequantize .

Atributos públicos

operación

Operation operation

producción

::tensorflow::Output output

Funciones publicas

Descuantizar

 Dequantize(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range
)

Descuantizar

 Dequantize(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range,
  const Dequantize::Attrs & attrs
)

nodo

::tensorflow::Node * node() const 

operador :: tensorflow :: Entrada

 operator::tensorflow::Input() const 

operador :: tensorflow :: Salida

 operator::tensorflow::Output() const 

Funciones estáticas públicas

Modo

Attrs Mode(
  StringPiece x
)