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
)