tensorflow:: ops:: QuantizeAndDequantizeV2

#include <array_ops.h>

Cuantiza y luego descuantiza un tensor.

Resumen

Esta operación simula la pérdida de precisión del paso hacia adelante cuantificado mediante:

  1. Cuantizar el tensor a números de punto fijo, que deben coincidir con el método de cuantización objetivo cuando se utilice en la inferencia.
  2. Descuantizarlo de nuevo a números de punto flotante para las siguientes operaciones, muy probablemente matmul.

Hay diferentes maneras de cuantizar. Esta versión solo utiliza escalado, por lo que 0.0 se asigna a 0.

A partir del valor especificado de 'num_bits' en el tipo de salida cuantificada, determina los valores cuantificados mínimos y máximos representables.

p.ej

  • [-128, 127] para signo, num_bits = 8, o
  • [0, 255] para sin signo, num_bits = 8.

Si range_given == False, los valores iniciales input_min e input_max se determinarán automáticamente como los valores mínimo y máximo del tensor de entrada; de lo contrario, se utilizarán los valores especificados de input_min e input_max.

Nota: Si se especifican input_min e input_max, no es necesario que coincidan con los valores mínimo y máximo reales del tensor. Por ejemplo, en algunos casos puede ser beneficioso especificar estos valores para recortar los extremos de baja probabilidad de la distribución de entrada.

Esta operación determina el factor de escala máximo que mapearía el rango inicial [input_min, input_max] a un rango que se encuentre dentro del rango cuantificado representable.

Determina la escala a partir de uno de los valores input_min e input_max, y luego actualiza el otro para maximizar el rango representable.

p.ej

  • Si la salida es con signo, num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: usaría un factor de escala de -128 / -10.0 = 12.8. En este caso, actualizaría input_max a 127 / 12.8 = 9.921875.
  • Si la salida es con signo, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: usaría un factor de escala de 127 / 10.0 = 12.7. En este caso, actualizaría input_min a 128.0 / 12.7 = -10.07874.
  • Si la salida no tiene signo, input_min se fuerza a ser 0 y solo se utiliza el valor especificado de input_max.

Después de determinar el factor de escala y actualizar el rango de entrada, aplica lo siguiente a cada valor en el tensor 'input'.

salida = redondear(clamp(valor, entrada_mínima, entrada_máxima) * factor_de_escala) / factor_de_escala.

La función round anterior redondea el valor en función del round_mode especificado.

Argumentos:

  • ámbito: Un objeto de ámbito
  • Entrada: Tensor para cuantificar y luego descuantizar.
  • input_min: Si range_given == True , esto especifica el valor mínimo de entrada que debe representarse; de ​​lo contrario, se determina a partir del valor mínimo del tensor input .
  • input_max: Si range_given == True , esto especifica el valor máximo de entrada que debe representarse; de ​​lo contrario, se determina a partir del valor máximo del tensor input .

Atributos opcionales (ver Attrs ):

  • signed_input: Indica si la cuantización es con signo o sin signo. (En realidad, este parámetro debería haberse llamado signed_output ).
  • num_bits: El ancho de bits de la cuantización.
  • range_given: Indica si el rango se proporciona o si debe determinarse a partir del tensor input .
  • round_mode: El atributo 'round_mode' controla qué algoritmo de desempate de redondeo se utiliza al redondear valores flotantes a sus equivalentes cuantizados. Actualmente se admiten los siguientes modos de redondeo:
  • HALF_TO_EVEN: este es el modo de redondeo predeterminado.
  • HALF_UP: redondea hacia el positivo. En este modo, 7,5 se redondea a 8 y -7,5 se redondea a -7.
  • narrow_range: Si es True, el valor absoluto del valor mínimo cuantificado es igual al valor máximo cuantificado, en lugar de ser 1 mayor. Por ejemplo, para una cuantificación de 8 bits, el valor mínimo es -127 en lugar de -128.
  • Eje: Si se especifica, este eje se trata como un eje de canal o de corte, y se utiliza un rango de cuantificación independiente para cada canal o corte a lo largo de este eje.

Devoluciones:

  • Output : El tensor de salida.

Constructores y destructores

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)

Atributos públicos

operation
output

Funciones públicas

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

funciones estáticas públicas

Axis (int64 x)
NarrowRange (bool x)
NumBits (int64 x)
RangeGiven (bool x)
RoundMode (StringPiece x)
SignedInput (bool x)

Estructuras

tensorflow:: ops:: QuantizeAndDequantizeV2:: Attrs

Configuradores de atributos opcionales para QuantizeAndDequantizeV2 .

Atributos públicos

operación

Operation operation

producción

::tensorflow::Output output

Funciones públicas

CuantizarYDescuantizarV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max
)

CuantizarYDescuantizarV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max,
  const QuantizeAndDequantizeV2::Attrs & attrs
)

nodo

::tensorflow::Node * node() const 

operador::tensorflow::Input

 operator::tensorflow::Input() const 

operador::tensorflow::Salida

 operator::tensorflow::Output() const 

funciones estáticas públicas

Eje

Attrs Axis(
  int64 x
)

Rango estrecho

Attrs NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

Rango dado

Attrs RangeGiven(
  bool x
)

Modo redondo

Attrs RoundMode(
  StringPiece x
)

Entrada firmada

Attrs SignedInput(
  bool x
)