Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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:

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