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:
- 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.
- 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 tensorinput
. - 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 tensorinput
.
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 )