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:
- Quantizzare il tensore in numeri in virgola fissa, che dovrebbero corrispondere al metodo di quantizzazione target quando viene utilizzato nell'inferenza.
- 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 tensoreinput
. - input_max: Se
range_given == True
, specifica il valore massimo di input che deve essere rappresentato, altrimenti viene determinato dal valore massimo del tensoreinput
.
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.
- 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.
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 | |
---|---|
Axis (int64 x) | |
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
Asse
Attrs Axis( int64 x )
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 )