tensorflow :: operaciones :: QuantizeAndDequantizeV2
#include <array_ops.h>
Cuantiza luego descuantifica un tensor.
Resumen
Esta operación simula la pérdida de precisión del paso hacia adelante cuantificado por:
- Cuantizar el tensor en números de punto fijo, que deben coincidir con el método de cuantificación objetivo cuando se usa en inferencia.
- Descuantizarlo de nuevo a números de punto flotante para las siguientes operaciones, muy probablemente matmul.
Hay diferentes formas de cuantificar. Esta versión usa solo escalado, por lo que 0.0 se asigna a 0.
A partir de los 'num_bits' especificados en el tipo de salida cuantificado, determina los valores cuantificados representables mínimos y máximos.
p.ej
- [-128, 127] para con signo, num_bits = 8, o
- [0, 255] para sin firmar, num_bits = 8.
Si range_given == False, el input_min inicial, input_max se determinará automáticamente como los valores mínimo y máximo en el tensor de entrada; de lo contrario, se utilizan 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ínimos y máximos reales en el tensor. por ejemplo, en algunos casos puede ser 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 mapeará el rango inicial [input_min, input_max] a un rango que se encuentra dentro del rango cuantificado representable.
Determina la escala de una de input_min y input_max, luego actualiza la otra 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 scale_factor de -128 / -10.0 = 12.8 En este caso, actualizaría input_max a 127 / 12.8 = 9,921875
- si la salida está firmada, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: usaría un scale_factor 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 usa 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 = round (abrazadera (valor, input_min, input_max) * scale_factor) / scale_factor.
La función de ronda anterior redondea el valor en función del modo de ronda dado.
Argumentos:
- alcance: un objeto de alcance
- input: 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 deinput
. - input_max: Si
range_given == True
, esto especifica el valor de entrada máximo que necesita ser representado; de lo contrario, se determina a partir del valor máximo del tensor deinput
.
Atributos opcionales (consulte Attrs
):
- Sign_input: si la cuantificación está firmada o no firmada. (en realidad, este parámetro debería haberse
signed_output
) - num_bits: el ancho de bits de la cuantificación.
- range_given: si el rango está dado o debe determinarse a partir del tensor de
input
. - round_mode: el atributo 'round_mode' controla qué algoritmo de redondeo de desempate se usa al redondear valores flotantes a sus equivalentes cuantificados. Actualmente se admiten los siguientes modos de redondeo:
- HALF_TO_EVEN: este es el modo round_mode predeterminado.
- HALF_UP: redondeo hacia positivo. En este modo, 7.5 redondea a 8 y -7.5 redondea a -7.
- rango estrecho: si es Verdadero, 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 la 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 canal o eje 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 publicas | |
---|---|
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 | Establecedores de atributos opcionales para QuantizeAndDequantizeV2 . |
Atributos públicos
operación
Operation operation
producción
::tensorflow::Output output
Funciones publicas
QuantizeAndDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
QuantizeAndDequantizeV2
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 )
NumBits
Attrs NumBits( int64 x )
RangeGiven
Attrs RangeGiven( bool x )
RoundMode
Attrs RoundMode( StringPiece x )
SignedInput
Attrs SignedInput( bool x )