tensorflow :: ops :: QuantizeAndDequantizeV2

#include <array_ops.h>

Quantizza quindi dequantizza un tensore.

Sommario

Questa operazione simula la perdita di precisione dal passaggio in avanti quantizzato di:

  1. Quantizzazione del tensore in numeri in virgola fissa, che dovrebbe corrispondere al metodo di quantizzazione target quando viene utilizzato per inferenza.
  2. Dequantizzandolo di nuovo a numeri in virgola mobile per le seguenti operazioni, molto probabilmente matmul.

Esistono diversi modi per quantizzare. Questa versione utilizza solo il ridimensionamento, quindi 0,0 viene mappato a 0.

Dai 'num_bits' specificati nel tipo di output quantizzato, determina i valori quantizzati rappresentabili minimo e massimo.

per esempio

  • [-128, 127] per signed, num_bits = 8 o
  • [0, 255] per senza segno, num_bits = 8.

Se range_given == False, l'input_min iniziale, input_max sarà determinato automaticamente come i valori minimo e massimo nel tensore di input, altrimenti vengono utilizzati i valori specificati di input_min, input_max.

Nota: se vengono specificati input_min, input_max, non è necessario che siano uguali ai valori minimo e massimo effettivi nel tensore. ad esempio, in alcuni casi può essere utile specificare questi valori in modo tale che gli estremi di bassa probabilità della distribuzione dell'input vengano tagliati.

Questa operazione determina il fattore di scala massimo che mapperebbe l'intervallo iniziale [input_min, input_max] a un intervallo che si trova all'interno dell'intervallo quantizzato rappresentabile.

Determina la scala da uno di input_min e input_max, quindi aggiorna l'altro per massimizzare l'intervallo rappresentabile.

per esempio

  • se l'output è firmato, num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: userebbe un fattore di scala di -128 / -10.0 = 12.8 In questo caso, aggiornerebbe input_max a 127 / 12.8 = 9.921875
  • se l'output è firmato, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: userebbe un fattore di scala di 127 / 10.0 = 12.7 In questo caso, aggiornerebbe input_min a 128.0 / 12.7 = -10.07874
  • se l'uscita è senza segno, input_min viene forzato a 0 e viene utilizzato solo input_max specificato.

Dopo aver determinato scale_factor e aggiornato l'intervallo di input, applica quanto segue a ciascun valore nel tensore "input".

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

La funzione round di cui sopra arrotonda il valore in base alla modalità round_mode data.

Argomenti:

  • scope: un oggetto Scope
  • input: Tensore per quantizzare e quindi dequantizzare.
  • input_min: Se range_given == True , specifica il valore di input minimo che deve essere rappresentato, altrimenti viene determinato dal valore minimo del tensore di input .
  • input_max: Se range_given == True , specifica il valore di input massimo che deve essere rappresentato, altrimenti viene determinato dal valore massimo del tensore di input .

Attributi opzionali (vedi Attrs ):

  • signed_input: indica se la quantizzazione è firmata o non firmata. (in realtà questo parametro avrebbe dovuto essere chiamato signed_output )
  • num_bits: la larghezza di bit della quantizzazione.
  • range_given: indica se l'intervallo è dato o deve essere determinato dal tensore di input .
  • round_mode: l'attributo 'round_mode' controlla quale algoritmo di arrotondamento tie-breaking viene utilizzato quando si arrotondano i valori float ai loro equivalenti quantizzati. Attualmente sono supportate le seguenti modalità di arrotondamento:
  • HALF_TO_EVEN: questo è il round_mode predefinito.
  • HALF_UP: tondo verso il positivo. In questa modalità 7,5 giri fino a 8 e -7,5 giri fino a -7.
  • narrow_range: se True, il valore assoluto del valore minimo quantizzato è uguale al valore massimo quantizzato, invece di 1 maggiore. cioè per la quantizzazione a 8 bit, il valore minimo è -127 invece di -128.
  • asse: se specificato, questo asse viene trattato come un canale o un asse di sezione e viene utilizzato un intervallo di quantizzazione separato per ciascun canale o sezione lungo questo asse.

Ritorna:

  • Output : il tensore di output.

Costruttori e distruttori

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)

Attributi pubblici

operation
output

Funzioni pubbliche

node () const
::tensorflow::Node *
operator::tensorflow::Input () const
operator::tensorflow::Output () const

Funzioni statiche pubbliche

Axis (int64 x)
NarrowRange (bool x)
NumBits (int64 x)
RangeGiven (bool x)
RoundMode (StringPiece x)
SignedInput (bool x)

Structs

tensorflow :: ops :: QuantizeAndDequantizeV2 :: Attrs

Setter di attributi opzionali per QuantizeAndDequantizeV2 .

Attributi pubblici

operazione

Operation operation

produzione

::tensorflow::Output output

Funzioni pubbliche

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
)

nodo

::tensorflow::Node * node() const 

operator :: tensorflow :: Input

 operator::tensorflow::Input() const 

operator :: tensorflow :: Output

 operator::tensorflow::Output() const 

Funzioni statiche pubbliche

Asse

Attrs Axis(
  int64 x
)

Gamma ristretta

Attrs NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

RangeGiven

Attrs RangeGiven(
  bool x
)

RoundMode

Attrs RoundMode(
  StringPiece x
)

SignedInput

Attrs SignedInput(
  bool x
)