tensorflow::ops::Déquantifier
#include <array_ops.h>Déquantifier le tenseur 'input' en un tenseur flottant.
Résumé
[min_range, max_range] sont des nombres flottants scalaires qui spécifient la plage des données d'entrée. L'attribut « mode » détermine précisément les calculs utilisés pour convertir les valeurs flottantes en leurs équivalents quantifiés.
En mode 'MIN_COMBINED', chaque valeur du tenseur subira le traitement suivant :
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() Exemple de mode MIN_COMBINÉ
Si l'entrée provient d'une fonction 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 respectivement 0,0 et 6,0. La déquantification sur quint8 prend chaque valeur, la convertit en float et la multiplie par 6 / 255. Notez que si le type de quantification est quint8, l'opération ajoute également 128 à chaque valeur 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)
Exemple de mode STALED
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'éliminer la valeur la plus basse possible par 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 déterminons d'abord l'intervalle des valeurs de notre tenseur. Cet intervalle est toujours centré 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 intervalles de quantification à virgule fixe, [min_fixed, max_fixed] . Si T est signé, il s'agit de
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é, l'intervalle à 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 :
- portée : un objet Scope
- min_range : La valeur scalaire minimale pouvant être produite pour l’entrée.
- max_range : La valeur scalaire maximale pouvant être 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::Dequantize::Attrs | Définiteurs d'attributs optionnels 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 )