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