tensorflow :: opérations :: QuantizeAndDequantizeV2
#include <array_ops.h>
Quantifie 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 doit correspondre à la méthode de quantification cible lorsqu'elle est utilisée en inférence.
- Déquantification en nombres à virgule flottante pour les opérations suivantes, probablement matmul.
Il existe différentes manières de quantifier. Cette version n'utilise que 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, le input_min initial, input_max sera déterminé automatiquement comme les valeurs minimum et maximum dans le tenseur d'entrée, sinon les valeurs spécifiées de input_min, input_max sont utilisées.
Remarque: Si input_min, input_max sont spécifiés, ils n'ont pas besoin d'égaler les valeurs minimales et maximales réelles dans le 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 tronqués.
Cette opération détermine le facteur d'échelle maximal qui mapperait la plage initiale [input_min, input_max] à une plage qui se trouve dans la plage quantifiée représentable.
Il détermine l'échelle entre 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]: il utiliserait un scale_factor de -128 / -10.0 = 12.8 Dans ce cas, il mettrait à jour input_max à 127 / 12.8 = 9,921875
- si la sortie est signée, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: il utiliserait un scale_factor de 127 / 10.0 = 12.7 Dans ce cas, il mettrait à jour input_min à 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 facteur d'échelle et mis à jour la plage d'entrée, il applique ce qui suit à chaque valeur du tenseur «d'entrée».
output = 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
- input: Tensor pour 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 d'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 d'input
.
Attributs facultatifs (voir Attrs
):
- igned_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 d'
input
. - round_mode: l'attribut 'round_mode' contrôle quel algorithme d'arrondi de départage est utilisé pour arrondir les valeurs flottantes à leurs équivalents quantifiés. Les modes d'arrondi suivants sont actuellement pris en charge:
- HALF_TO_EVEN: c'est le round_mode par défaut.
- HALF_UP: arrondi vers le positif. Dans ce mode, 7,5 arrondis à 8 et -7,5 arrondis à -7.
- narrow_range: Si True, 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 que pour une quantification 8 bits, la valeur minimale est -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) |
Structs | |
---|---|
tensorflow :: ops :: QuantizeAndDequantizeV2 :: Attrs | Définisseurs d'attributs facultatifs pour QuantizeAndDequantizeV2 . |
Attributs publics
opération
Operation operation
production
::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
operator :: tensorflow :: Input
operator::tensorflow::Input() const
operator :: tensorflow :: Output
operator::tensorflow::Output() const
Fonctions statiques publiques
Fourchette étroite
Attrs NarrowRange( bool x )
NumBits
Attrs NumBits( int64 x )
GammeGiven
Attrs RangeGiven( bool x )
RoundMode
Attrs RoundMode( StringPiece x )
SignedInput
Attrs SignedInput( bool x )