tensorflow :: operaciones :: Descuantizar
#include <array_ops.h>
Descuantizar el tensor de 'entrada' en un tensor flotante.
Resumen
[rango_mín, rango_máx] son flotantes escalares que especifican el rango para los datos de 'entrada'. El atributo 'modo' controla exactamente qué cálculos se utilizan para convertir los valores flotantes en sus equivalentes cuantificados.
En el modo 'MIN_COMBINED', cada valor del tensor pasará por lo siguiente:
if T == qint8: in[i] += (range(T) + 1)/ 2.0 out[i] = min_range + (in[i]* (max_range - min_range) / range(T))aquí
range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
Ejemplo de modo MIN_COMBINED
Si la entrada proviene de QuantizedRelu6 , el tipo de salida es quint8 (rango de 0-255) pero el rango posible de QuantizedRelu6 es 0-6. Por lo tanto, los valores min_range y max_range son 0.0 y 6.0. Dequantize en quint8 tomará cada valor, se convertirá en flotante y se multiplicará por 6 / 255. Tenga en cuenta que si el tipo cuantizado es qint8, la operación agregará adicionalmente cada valor por 128 antes de la conversión.
Si el modo es 'MIN_FIRST', se utiliza este enfoque:
num_discrete_values = 1 << (# of bits in T) range_adjust = num_discrete_values / (num_discrete_values - 1) range = (range_max - range_min) * range_adjust range_scale = range / num_discrete_values const double offset_input = static_cast(input) - lowest_quantized; result = range_min + ((input - numeric_limits ::min()) * range_scale)
Ejemplo de modo ESCALADO
SCALED
modo SCALED
coincide con el enfoque de cuantificación utilizado en QuantizeAndDequantize{V2|V3}
.
Si el modo es SCALED
, no usamos el rango completo del tipo de salida, eligiendo elidir el valor más bajo posible para la simetría (por ejemplo, el rango de salida es -127 a 127, no -128 a 127 para cuantificación de 8 bits con signo) de modo que 0.0 se asigna a 0.
Primero encontramos el rango de valores en nuestro tensor. El rango que usamos siempre se centra en 0, por lo que encontramos m tal que
m = max(abs(input_min), abs(input_max))
Nuestro rango de tensor de entrada es entonces [-m, m]
.
A continuación, elegimos nuestros cubos de cuantificación de punto fijo, [min_fixed, max_fixed]
. Si T está firmado, esto es
num_bits = sizeof(T) * 8 [min_fixed, max_fixed] = [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]
De lo contrario, si T no está firmado, el rango de punto fijo es
[min_fixed, max_fixed] = [0, (1 << num_bits) - 1]
A partir de esto, calculamos nuestro factor de escala, s:
s = (2 * m) / (max_fixed - min_fixed)
Ahora podemos descuantificar los elementos de nuestro tensor:
result = input * s
Argumentos:
- alcance: un objeto de alcance
- min_range: El valor escalar mínimo que posiblemente se produzca para la entrada.
- max_range: el valor escalar máximo que se puede producir para la entrada.
Devoluciones:
-
Output
: el tensor de salida.
Constructores y Destructores | |
---|---|
Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range) | |
Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, const Dequantize::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 | |
---|---|
Mode (StringPiece x) |
Estructuras | |
---|---|
tensorflow :: ops :: Dequantize :: Attrs | Establecedores de atributos opcionales para Dequantize . |
Atributos públicos
operación
Operation operation
producción
::tensorflow::Output output
Funciones publicas
Descuantizar
Dequantize( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range )
Descuantizar
Dequantize( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, const Dequantize::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
Modo
Attrs Mode( StringPiece x )