tensorflow::ops::QuantizeAndDequantizeV2

#include <array_ops.h>

Quantifie puis déquantifie un tenseur.

Résumé

Cette opération simule la perte de précision due à la transmission directe quantifiée par :

  1. Quantification du tenseur à des nombres à virgule fixe, qui doivent correspondre à la méthode de quantification cible lorsqu'il est utilisé dans l'inférence.
  2. Déquantification en nombres à virgule flottante pour les opérations suivantes, probablement une multiplication mathématique.

Il existe différentes méthodes de quantification. Cette version utilise uniquement la mise à l'échelle, donc 0,0 correspond à 0.

À partir du nombre de bits « num_bits » spécifié dans le type de sortie quantifiée, il détermine les valeurs quantifiées minimales et maximales représentables.

par exemple

  • [-128, 127] pour signé, num_bits = 8, ou
  • [0, 255] pour non signé, num_bits = 8.

Si range_given == False, les valeurs initiales de input_min et input_max seront déterminées automatiquement comme étant les valeurs minimales et maximales du tenseur d'entrée ; sinon, les valeurs spécifiées de input_min et input_max seront utilisées.

Remarque : Si les valeurs input_min et input_max sont spécifiées, elles ne doivent pas nécessairement correspondre aux valeurs minimale et maximale réelles du tenseur. Par exemple, dans certains cas, il peut être avantageux de spécifier ces valeurs afin d’écrêter les valeurs extrêmes de faible probabilité de la distribution d’entrée.

Cette opération détermine le facteur d'échelle maximal qui permettrait de transformer la plage initiale [input_min, input_max] en une plage qui se situe dans la plage quantifiée représentable.

Il détermine l'échelle à partir de l'une des valeurs input_min et input_max, puis met à jour l'autre pour maximiser la plage représentable.

par exemple

  • Si la sortie est signée, num_bits = 8, [input_min, input_max] = [-10.0, 5.0] : le facteur d'échelle utilisé serait de -128 / -10.0 = 12.8. Dans ce cas, input_max serait mis à jour à 127 / 12.8 = 9.921875.
  • Si la sortie est signée, num_bits = 8, [input_min, input_max] = [-10.0, 10.0] : un facteur d'échelle de 127 / 10.0 = 12.7 serait utilisé. Dans ce cas, input_min serait mis à jour à 128.0 / 12.7 = -10.07874.
  • Si la sortie n'est pas signée, input_min est forcé à 0 et seule la valeur de input_max spécifiée est utilisée.

Après avoir déterminé le facteur d'échelle et mis à jour la plage d'entrée, il applique ce qui suit à chaque valeur du tenseur « entrée ».

sortie = arrondi(clamp(valeur, entrée_min, entrée_max) * facteur_échelle) / facteur_échelle.

La fonction d'arrondi ci-dessus arrondit la valeur en fonction du mode d'arrondi spécifié.

Arguments :

  • portée : un objet Scope
  • Entrée : Tenseur à quantifier puis à déquantifier.
  • input_min : Si range_given == True , cela spécifie la valeur d'entrée minimale qui doit être représentée ; sinon, elle est déterminée à partir de la valeur minimale du tenseur input .
  • input_max : Si range_given == True , cela spécifie la valeur d'entrée maximale qui doit être représentée ; sinon, elle est déterminée à partir de la valeur maximale du tenseur input .

Attributs optionnels (voir Attrs ) :

  • signed_input : Indique si la quantification est signée ou non signée. (En réalité, ce paramètre aurait dû s’appeler signed_output .)
  • num_bits : La largeur en bits de la quantification.
  • range_given : Indique si la plage est donnée ou doit être déterminée à partir du tenseur input .
  • round_mode : L’attribut « round_mode » détermine l’algorithme de départage utilisé pour arrondir les valeurs flottantes à leurs équivalents quantifiés. Les modes d’arrondi suivants sont actuellement pris en charge :
  • HALF_TO_EVEN : il s'agit du mode d'arrondi par défaut.
  • HALF_UP : arrondi vers le positif. Dans ce mode, 7,5 est arrondi à 8 et -7,5 est arrondi à -7.
  • narrow_range : Si la valeur est True, la valeur absolue de la valeur minimale quantifiée est identique à la valeur maximale quantifiée, au lieu d'être supérieure de 1. Par exemple, pour une quantification sur 8 bits, la valeur minimale est -127 au lieu de -128.

Retours :

  • Output : Le tenseur de sortie.

Constructeurs et destructeurs

QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max)
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs)

attributs publics

operation
output

fonctions publiques

node () const
::tensorflow::Node *
operator::tensorflow::Input () const
operator::tensorflow::Output () const

fonctions statiques publiques

NarrowRange (bool x)
NumBits (int64 x)
RangeGiven (bool x)
RoundMode (StringPiece x)
SignedInput (bool x)

Structures

tensorflow::ops::QuantizeAndDequantizeV2::Attrs

Définiteurs d'attributs optionnels pour QuantizeAndDequantizeV2 .

attributs publics

opération

Operation operation

sortir

::tensorflow::Output output

fonctions publiques

QuantifierEtDéquantifierV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max
)

QuantifierEtDéquantifierV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max,
  const QuantizeAndDequantizeV2::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

NarrowRange

Attrs NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

Portée donnée

Attrs RangeGiven(
  bool x
)

Mode rond

Attrs RoundMode(
  StringPiece x
)

Entrée signée

Attrs SignedInput(
  bool x
)