tensoreflusso:: ops:: Quantizzare e dequantizzare V2

#include <array_ops.h>

Quantizza quindi dequantizza un tensore.

Riepilogo

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

  1. Quantizzare il tensore in numeri in virgola fissa, che dovrebbero corrispondere al metodo di quantizzazione target quando viene utilizzato nell'inferenza.
  2. Dequantizzandolo nuovamente ai numeri in virgola mobile per le operazioni successive, molto probabilmente matmul.

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

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

per esempio

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

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

Nota: se vengono specificati input_min e 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 a bassa probabilità della distribuzione degli input vengano ritagliati.

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

Determina la scala da uno tra 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]: utilizzerebbe un scale_factor di -128 / -10.0 = 12.8 In questo caso, aggiornerebbe input_max in 127 / 12.8 = 9.921875
  • se l'output è firmato, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: utilizzerebbe un scale_factor di 127 / 10.0 = 12.7 In questo caso, aggiornerebbe input_min in 128.0 / 12.7 = -10.07874
  • se l'output non è firmato, input_min viene forzato a essere 0 e viene utilizzato solo l'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(morsetto(valore, input_min, input_max) * fattore_scala) / fattore_scala.

La funzione round precedente arrotonda il valore in base al round_mode specificato.

Argomenti:

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

Attributi facoltativi (vedi Attrs ):

  • Signed_input: indica se la quantizzazione è con segno o senza segno. (in realtà questo parametro avrebbe dovuto essere signed_output )
  • num_bits: la larghezza di bit della quantizzazione.
  • range_given: se l'intervallo è dato o deve essere determinato dal tensore input .
  • round_mode: l'attributo 'round_mode' controlla quale algoritmo di arrotondamento viene utilizzato quando si arrotondano i valori float ai loro equivalenti quantizzati. Attualmente sono supportate le seguenti modalità di arrotondamento:
  • HALF_TO_EVEN: questa è la modalità round_mode predefinita.
  • HALF_UP: arrotonda al positivo. In questa modalità 7,5 arrotonda a 8 e -7,5 arrotonda 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.

Resi:

  • Output : il tensore di uscita.

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 pubbliche statiche

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

Strutture

tensorflow:: ops:: QuantizeAndDequantizeV2:: Attrs

Setter di attributi facoltativi per QuantizeAndDequantizeV2 .

Attributi pubblici

operazione

Operation operation

produzione

::tensorflow::Output output

Funzioni pubbliche

Quantizzare e dequantizzare V2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max
)

Quantizzare e dequantizzare V2

 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 

operatore::tensorflow::Input

 operator::tensorflow::Input() const 

operatore::tensorflow::Output

 operator::tensorflow::Output() const 

Funzioni pubbliche statiche

Raggio ristretto

Attrs NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

Gamma data

Attrs RangeGiven(
  bool x
)

Modalità rotonda

Attrs RoundMode(
  StringPiece x
)

SignedInput

Attrs SignedInput(
  bool x
)