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 :
- Quantification du tenseur en nombres à virgule fixe, qui doivent correspondre à la méthode de quantification cible lorsqu'elle est utilisée en inférence.
- 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 minimale et maximale 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 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 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.
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 | 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
Plage é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 )