flux tensoriel : : opérations : : Déquantifier
#include <array_ops.h>
Déquantifiez le tenseur « d'entrée » en un float Tensor .
Résumé
[min_range, max_range] sont des flottants scalaires qui spécifient la plage des données « d'entrée ». L'attribut 'mode' contrôle exactement quels calculs sont utilisés pour convertir les valeurs flottantes en leurs équivalents quantifiés.
En mode 'MIN_COMBINED', chaque valeur du tenseur subira les opérations suivantes :
if T == qint8: in[i] += (range(T) + 1)/ 2.0 out[i] = min_range + (in[i]* (max_range - min_range) / range(T))
range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
Exemple de mode MIN_COMBINED
Si l'entrée provient d'un QuantizedRelu6 , le type de sortie est quint8 (plage de 0 à 255) mais la plage possible de QuantizedRelu6 est de 0 à 6. Les valeurs min_range et max_range sont donc 0,0 et 6,0. Dequantize sur quint8 prendra chaque valeur, convertie en float et multipliée par 6/255. Notez que si quantizedtype est qint8, l'opération ajoutera en plus chaque valeur par 128 avant la conversion.
Si le mode est « MIN_FIRST », alors cette approche est utilisée :
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)
Mode ÉCHELLE Exemple
Le mode SCALED
correspond à l'approche de quantification utilisée dans QuantizeAndDequantize{V2|V3}
.
Si le mode est SCALED
, nous n'utilisons pas toute la plage du type de sortie, en choisissant d'élider la valeur la plus basse possible pour la symétrie (par exemple, la plage de sortie est de -127 à 127, et non de -128 à 127 pour une quantification signée sur 8 bits), de sorte que 0,0 correspond à 0.
Nous trouvons d’abord la plage de valeurs dans notre tenseur. La plage que nous utilisons est toujours centrée sur 0, nous trouvons donc m tel que
m = max(abs(input_min), abs(input_max))
Notre plage de tenseurs d'entrée est alors [-m, m]
.
Ensuite, nous choisissons nos compartiments de quantification à virgule fixe, [min_fixed, max_fixed]
. Si T est signé, c'est
num_bits = sizeof(T) * 8 [min_fixed, max_fixed] = [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]
Sinon, si T n'est pas signé, la plage en virgule fixe est
[min_fixed, max_fixed] = [0, (1 << num_bits) - 1]
À partir de là, nous calculons notre facteur d’échelle, s :
s = (2 * m) / (max_fixed - min_fixed)
Nous pouvons maintenant déquantifier les éléments de notre tenseur :
result = input * s
Arguments :
- scope : un objet Scope
- min_range : la valeur scalaire minimale éventuellement produite pour l'entrée.
- max_range : la valeur scalaire maximale éventuellement produite pour l'entrée.
Retours :
-
Output
: Le tenseur de sortie.
Constructeurs et Destructeurs | |
---|---|
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) |
Attributs publics | |
---|---|
operation | |
output |
Fonctions publiques | |
---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const |
Fonctions statiques publiques | |
---|---|
Mode (StringPiece x) |
Structures | |
---|---|
tensorflow : ops : Déquantifier : Attrs | Setters d'attributs facultatifs pour Dequantize . |
Attributs publics
opération
Operation operation
sortir
::tensorflow::Output output
Fonctions publiques
Déquantifier
Dequantize( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range )
Déquantifier
Dequantize( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, const Dequantize::Attrs & attrs )
nœud
::tensorflow::Node * node() const
opérateur :: tensorflow :: Entrée
operator::tensorflow::Input() const
opérateur :: tensorflow :: Sortie
operator::tensorflow::Output() const
Fonctions statiques publiques
Mode
Attrs Mode( StringPiece x )