przepływ tensorowy:: ops:: Kwantyzacja i dekwantyzacja V2
#include <array_ops.h>
Kwantyzuje, a następnie dekwantyzuje tensor.
Streszczenie
Ta operacja symuluje utratę precyzji w wyniku skwantowanego przejścia do przodu poprzez:
- Kwantyzacja tensora do liczb stałoprzecinkowych, które powinny odpowiadać docelowej metodzie kwantyzacji, gdy jest ona używana do wnioskowania.
- Dekwantyzacja z powrotem do liczb zmiennoprzecinkowych dla kolejnych operacji, najprawdopodobniej matmul.
Istnieją różne sposoby kwantyzacji. Ta wersja używa tylko skalowania, więc 0.0 jest odwzorowane na 0.
Na podstawie określonej „liczby_bitów” w skwantowanym typie wyjścia określa minimalną i maksymalną reprezentowalną skwantowaną wartość.
np
- [-128, 127] dla podpisu, num_bits = 8, lub
- [0, 255] dla bez znaku, num_bits = 8.
Jeżeli range_given == False, początkowe wartości input_min, input_max zostaną określone automatycznie jako wartości minimalne i maksymalne w tensorze wejściowym, w przeciwnym razie użyte zostaną określone wartości input_min, input_max.
Uwaga: Jeśli określono input_min, input_max, nie muszą one być równe rzeczywistym wartościom minimalnym i maksymalnym w tensorze. np. w niektórych przypadkach korzystne może być określenie tych wartości w taki sposób, aby obcięte zostały ekstrema o niskim prawdopodobieństwie rozkładu wejściowego.
Ta operacja określa maksymalny współczynnik skali, który odwzorowuje początkowy zakres [input_min, input_max] na zakres mieszczący się w reprezentowalnym skwantowanym zakresie.
Określa skalę z jednego z input_min i input_max, a następnie aktualizuje drugą, aby zmaksymalizować reprezentowalny zakres.
np
- jeśli wyjście jest podpisane, num_bits = 8, [input_min, input_max] = [-10,0, 5,0]: użyłby współczynnika skali wynoszącego -128 / -10,0 = 12,8. W tym przypadku zaktualizowałby input_max do 127 / 12,8 = 9,921875
- jeśli wyjście jest podpisane, num_bits = 8, [input_min, input_max] = [-10,0, 10,0]: użyłby współczynnika skali wynoszącego 127 / 10,0 = 12,7. W tym przypadku zaktualizowałby input_min do 128,0 / 12,7 = -10,07874
- jeśli dane wyjściowe nie są podpisane, parametr input_min ma wartość 0 i używana jest tylko określona wartość input_max.
Po określeniu współczynnika skali i zaktualizowaniu zakresu wejściowego, do każdej wartości w tensorze „wejściowym” stosuje się następujące czynności.
wyjście = round(zacisk(wartość, min_wejściowy, max_wejściowy) * współczynnik_skali) / współczynnik_skali.
Powyższa funkcja okrągła zaokrągla wartość w oparciu o podany tryb round_mode.
Argumenty:
- zakres: Obiekt Scope
- dane wejściowe: Tensor do kwantyzacji, a następnie dekwantyzacji.
- input_min: Jeśli
range_given == True
, określa minimalną wartość wejściową, która musi być reprezentowana, w przeciwnym razie jest ona określana na podstawie minimalnej wartości tensorainput
. - input_max: Jeśli
range_given == True
, określa to maksymalną wartość wejściową, która musi być reprezentowana, w przeciwnym razie jest ona określana na podstawie maksymalnej wartości tensorainput
.
Opcjonalne atrybuty (patrz Attrs
):
- Sign_input: Określa, czy kwantyzacja jest ze znakiem, czy bez znaku. (właściwie ten parametr powinien był nazywać
signed_output
) - num_bits: Szerokość bitowa kwantyzacji.
- range_given: Określa, czy zakres jest podany, czy też powinien być określony na podstawie tensora
input
. - round_mode: Atrybut „round_mode” kontroluje, który algorytm zaokrąglania rozstrzygania remisów jest używany podczas zaokrąglania wartości zmiennoprzecinkowych do ich skwantowanych odpowiedników. Obecnie obsługiwane są następujące tryby zaokrąglania:
- HALF_TO_EVEN: jest to domyślny tryb round_mode.
- HALF_UP: zaokrąglij w kierunku dodatnim. W tym trybie 7,5 zaokrągla do 8, a -7,5 zaokrągla do -7.
- wąski_zakres: Jeśli ma wartość True, wówczas wartość bezwzględna skwantowanej wartości minimalnej jest taka sama jak skwantowana wartość maksymalna, a nie o 1 większa. tj. dla kwantyzacji 8-bitowej minimalna wartość wynosi -127 zamiast -128.
- oś: Jeśli określono, ta oś jest traktowana jako oś kanału lub wycinka i dla każdego kanału lub wycinka wzdłuż tej osi używany jest oddzielny zakres kwantyzacji.
Zwroty:
-
Output
: Tensor wyjściowy.
Konstruktory i destruktory | |
---|---|
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) |
Atrybuty publiczne | |
---|---|
operation | |
output |
Funkcje publiczne | |
---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const |
Publiczne funkcje statyczne | |
---|---|
Axis (int64 x) | |
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) |
Struktury | |
---|---|
tensorflow:: ops:: QuantizeAndDequantizeV2:: Attrs | Opcjonalne moduły ustawiające atrybuty dla QuantizeAndDequantizeV2 . |
Atrybuty publiczne
działanie
Operation operation
wyjście
::tensorflow::Output output
Funkcje publiczne
Kwantyzacja i dekwantyzacja V2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
Kwantyzacja i dekwantyzacja V2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs )
węzeł
::tensorflow::Node * node() const
operator::tensorflow::Wejście
operator::tensorflow::Input() const
operator::tensorflow::Wyjście
operator::tensorflow::Output() const
Publiczne funkcje statyczne
Oś
Attrs Axis( int64 x )
WąskiZakres
Attrs NarrowRange( bool x )
Liczba bitów
Attrs NumBits( int64 x )
ZakresPodany
Attrs RangeGiven( bool x )
Tryb okrągły
Attrs RoundMode( StringPiece x )
Podpisane wejście
Attrs SignedInput( bool x )