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 :
- Quantification du tenseur à des nombres à virgule fixe, qui doivent correspondre à la méthode de quantification cible lorsqu'il est utilisé dans l'inférence.
- 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 tenseurinput. - 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 tenseurinput.
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 )