tensorflow :: opérations :: Déquantifier
#include <array_ops.h>
Déquantifier le tenseur « d'entrée » dans un flotteur Tensor .
Résumé
[min_range, max_range] sont des flottants scalaires qui spécifient la plage pour les 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 ce qui suit:
if T == qint8: in[i] += (range(T) + 1)/ 2.0 out[i] = min_range + (in[i]* (max_range - min_range) / range(T))ici
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. La déquantification sur quint8 prendra chaque valeur, transtypée en flottant et multipliée par 6 / 255. Notez que si le type quantifié est qint8, l'opération ajoutera en plus chaque valeur par 128 avant la transtypage.
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)
Exemple de mode SCALED
SCALED
mode SCALED
correspond à l'approche de quantification utilisée dans QuantizeAndDequantize{V2|V3}
.
Si le mode est SCALED
, nous n'utilisons pas la plage complète 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 la quantification 8 bits signée), 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, donc nous trouvons m tel que
m = max(abs(input_min), abs(input_max))
Notre gamme de tenseur d'entrée est alors [-m, m]
.
Ensuite, nous choisissons nos [min_fixed, max_fixed]
quantification en 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.
Retour:
-
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) |
Structs | |
---|---|
tensorflow :: ops :: Dequantize :: Attrs | Définisseurs d' attributs facultatifs pour la déquantification . |
Attributs publics
opération
Operation operation
production
::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
operator :: tensorflow :: Input
operator::tensorflow::Input() const
operator :: tensorflow :: Output
operator::tensorflow::Output() const
Fonctions statiques publiques
Mode
Attrs Mode( StringPiece x )