flux tensoriel : : opérations : : QuantizeAndDequantizeV2

#include <array_ops.h>

Quantise puis déquantifie un tenseur.

Résumé

Cette opération simule la perte de précision du passage avant quantifié par :

  1. Quantification du tenseur en nombres à virgule fixe, qui doivent correspondre à la méthode de quantification cible lorsqu'elle est utilisée en inférence.
  2. Le déquantifier en nombres à virgule flottante pour les opérations suivantes, très probablement matmul.

Il existe différentes manières de quantifier. Cette version utilise uniquement la mise à l'échelle, donc 0,0 correspond à 0.

À partir des « num_bits » spécifiés 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 input_min, input_max initiaux seront déterminés automatiquement comme les valeurs minimales et maximales dans le tenseur d'entrée, sinon les valeurs spécifiées de input_min, input_max sont utilisées.

Remarque : Si input_min et input_max sont spécifiés, ils n'ont pas besoin d'être égaux aux valeurs minimale et maximale réelles du tenseur. par exemple, dans certains cas, il peut être avantageux de spécifier ces valeurs de telle sorte que les extrêmes de faible probabilité de la distribution d'entrée soient écrêtés.

Cette opération détermine le facteur d'échelle maximum qui mapperait la plage initiale [input_min, input_max] à une plage située dans la plage quantifiée représentable.

Il détermine l'échelle à partir de l'un des 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] : elle utiliserait un scale_factor de -128 / -10.0 = 12.8 Dans ce cas, elle mettrait à jour input_max pour être 127 / 12,8 = 9.921875
  • si la sortie est signée, num_bits = 8, [input_min, input_max] = [-10.0, 10.0] : elle utiliserait un scale_factor de 127/10.0 = 12.7. Dans ce cas, elle mettrait à jour input_min pour qu'elle soit 128.0/12.7 = -10.07874.
  • si la sortie n'est pas signée, input_min est forcé à 0 et seul le input_max spécifié est utilisé.

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

sortie = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.

La fonction round ci-dessus arrondit la valeur en fonction du round_mode donné.

Arguments:

  • scope : 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 facultatifs (voir Attrs ) :

  • signé_input : indique si la quantification est signée ou non signée. (en fait, ce paramètre aurait dû être appelé signed_output )
  • num_bits : la largeur de 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' contrôle quel algorithme de départage est utilisé lors de l'arrondi des valeurs flottantes à leurs équivalents quantifiés. Les modes d'arrondi suivants sont actuellement pris en charge :
  • HALF_TO_EVEN : c'est le mode round_mode par défaut.
  • HALF_UP : arrondir vers le positif. Dans ce mode, 7,5 arrondit à 8 et -7,5 arrondit à -7.
  • étroit_range : si vrai, alors la valeur absolue de la valeur minimale quantifiée est la même que la valeur maximale quantifiée, au lieu de 1 supérieure. c'est-à-dire pour une quantification sur 8 bits, la valeur minimale est de -127 au lieu de -128.

Retour:

  • 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

Setters d'attributs facultatifs pour QuantizeAndDequantizeV2 .

Attributs publics

opération

Operation operation

sortir

::tensorflow::Output output

Fonctions publiques

QuantizeAndDequantizeV2

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

QuantizeAndDequantizeV2

 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

Fourchette étroite

Attrs NarrowRange(
  bool x
)

Nombre de bits

Attrs NumBits(
  int64 x
)

PlageDonnée

Attrs RangeGiven(
  bool x
)

Mode rond

Attrs RoundMode(
  StringPiece x
)

Entrée signée

Attrs SignedInput(
  bool x
)