flujo tensor:: operaciones:: Cuantizar y decuantificar V2

#include <array_ops.h>

Cuantiza y luego descuantifica un tensor.

Resumen

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

  1. Cuantificar el tensor en números de punto fijo, que deben coincidir con el método de cuantificación objetivo cuando se utiliza en inferencia.
  2. Descuantificarlo nuevamente a números de punto flotante para las siguientes operaciones, muy probablemente matmul.

Hay diferentes formas de cuantificar. Esta versión solo usa escala, por lo que 0.0 se asigna a 0.

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

p.ej

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

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

Nota: Si se especifican input_min, input_max, no es necesario que sean iguales a los valores mínimo y máximo reales en el tensor. por ejemplo, en algunos casos puede resultar beneficioso especificar estos valores de manera que se recorten los extremos de baja probabilidad de la distribución de entrada.

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

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

p.ej

  • si la salida está firmada, 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 para que sea 127 / 12.8 = 9.921875
  • si la salida está firmada, 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 para que sea 128.0/12.7 = -10.07874
  • si la salida no está firmada, se fuerza que input_min sea 0 y solo se utiliza el input_max especificado.

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

salida = ronda(abrazadera(valor, entrada_min, entrada_max) * factor_escala) / factor_escala.

La función de ronda anterior redondea el valor según el round_mode dado.

Argumentos:

  • alcance: un objeto de alcance
  • entrada: Tensor para cuantificar y luego descuantificar.
  • input_min: si range_given == True , esto especifica el valor de entrada mínimo 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 de entrada máximo que debe representarse; de ​​lo contrario, se determina a partir del valor máximo del tensor input .

Atributos opcionales (ver Attrs ):

  • signed_input: si la cuantificación está firmada o no firmada. (En realidad, este parámetro debería haberse llamado signed_output )
  • num_bits: el ancho de bits de la cuantificación.
  • range_given: si el rango se proporciona o 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 cuantificados. Actualmente se admiten los siguientes modos de redondeo:
  • HALF_TO_EVEN: este es el modo redondo predeterminado.
  • HALF_UP: redondeo hacia positivo. En este modo, 7,5 se redondea a 8 y -7,5 se redondea a -7.
  • rango_estrecho: si es Verdadero, entonces el valor absoluto del valor mínimo cuantificado es el mismo que el valor máximo cuantificado, en lugar de 1 mayor. es decir, 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 segmento, y se utiliza un rango de cuantificación separado para cada canal o segmento 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:: operaciones:: QuantizeAndDequantizeV2:: Atributos

Configuradores de atributos opcionales para QuantizeAndDequantizeV2 .

Atributos públicos

operación

Operation operation

producción

::tensorflow::Output output

Funciones públicas

Cuantizar y decuantificar V2

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

Cuantizar y decuantificar V2

 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::Entrada

 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
)

Números de bits

Attrs NumBits(
  int64 x
)

Rango dado

Attrs RangeGiven(
  bool x
)

Modo redondo

Attrs RoundMode(
  StringPiece x
)

Entrada firmada

Attrs SignedInput(
  bool x
)