tensorflow::ops::QuantizeAndDequantizeV2

#include <array_ops.h>

Quantizza e poi dequantizza un tensore.

Riepilogo

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

  1. Quantizzazione del tensore a numeri a virgola fissa, che devono corrispondere al metodo di quantizzazione di destinazione quando viene utilizzato nell'inferenza.
  2. Dequantizzando nuovamente i dati in numeri a virgola mobile per le operazioni successive, molto probabilmente la moltiplicazione matriciale.

Esistono diversi modi per quantizzare. Questa versione utilizza solo la scalatura, quindi 0,0 corrisponde a 0.

In base al valore specificato di 'num_bits' nel tipo di output quantizzato, determina i valori quantizzati minimi e massimi rappresentabili.

per esempio

  • [-128, 127] per i numeri con segno, num_bits = 8, oppure
  • [0, 255] per senza segno, num_bits = 8.

Se range_given == False, i valori iniziali di input_min e input_max verranno determinati automaticamente come valori minimo e massimo nel tensore di input; altrimenti, verranno utilizzati i valori specificati per input_min e input_max.

Nota: se input_min e input_max sono specificati, non è necessario che corrispondano ai valori minimi e massimi effettivi del tensore. Ad esempio, in alcuni casi può essere utile specificare questi valori in modo da eliminare gli estremi a bassa probabilità della distribuzione di input.

Questa operazione determina il fattore di scala massimo che mapperebbe l'intervallo iniziale [input_min, input_max] a un intervallo che rientra nell'intervallo quantizzato rappresentabile.

Determina la scala in base a uno tra input_min e input_max, quindi aggiorna l'altro per massimizzare l'intervallo rappresentabile.

per esempio

  • se l'output è con segno, 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 è con segno, 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'output non è di tipo signage, input_min viene forzato a 0 e viene utilizzato solo il valore specificato in input_max.

Dopo aver determinato il fattore di scala 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 sopra riportata arrotonda il valore in base alla modalità round_mode specificata.

Argomentazioni:

  • ambito: un oggetto Scope
  • Input: Tensore da quantizzare e poi dequantizzare.
  • input_min: Se range_given == True , questo parametro 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 , questo parametro specifica il valore massimo di input che deve essere rappresentato; altrimenti, viene determinato dal valore massimo del tensore input .

Attributi opzionali (vedere Attrs ):

  • signed_input: Indica se la quantizzazione è con segno o senza segno. (in realtà questo parametro avrebbe dovuto chiamarsi signed_output )
  • num_bits: Larghezza in bit della quantizzazione.
  • range_given: Indica se l'intervallo è fornito o se deve essere determinato dal tensore input .
  • round_mode: L'attributo 'round_mode' controlla quale algoritmo di risoluzione dei casi 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à di arrotondamento predefinita.
  • HALF_UP: arrotondamento per eccesso verso il valore positivo. In questa modalità 7,5 viene arrotondato a 8 e -7,5 viene arrotondato a -7.
  • narrow_range: Se True, il valore assoluto del valore minimo quantizzato è uguale al valore massimo quantizzato, anziché essere maggiore di 1. Ad esempio, per la quantizzazione a 8 bit, il valore minimo è -127 invece di -128.
  • asse: se specificato, questo asse viene trattato come un asse di canale o di fetta e viene utilizzato un intervallo di quantizzazione separato per ciascun canale o fetta lungo questo asse.

Resi:

  • 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)

Strutture

tensorflow::ops::QuantizeAndDequantizeV2::Attrs

Impostatori 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 

operatore::tensorflow::Input

 operator::tensorflow::Input() const 

operatore::tensoreflusso::output

 operator::tensorflow::Output() const 

Funzioni statiche pubbliche

Asse

Attrs Axis(
  int64 x
)

Gamma ristretta

Attrs NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

Intervallo fornito

Attrs RangeGiven(
  bool x
)

Modalità rotonda

Attrs RoundMode(
  StringPiece x
)

SignedInput

Attrs SignedInput(
  bool x
)