tensorflow:: ops:: Kwantuj i dekwantyzuj V2
#include <array_ops.h>Kwantuje, a następnie dekwantuje tensor.
Streszczenie
Operacja ta symuluje utratę precyzji wynikającą z kwantyzowanego przejścia do przodu poprzez:
- Kwantowanie tensora do liczb stałoprzecinkowych, które powinny odpowiadać docelowej metodzie kwantyzacji, gdy jest stosowana we wnioskowaniu.
- Dekwantyzacja z powrotem do liczb zmiennoprzecinkowych dla następujących operacji, najprawdopodobniej matmul.
Istnieją różne sposoby kwantyzacji. Ta wersja wykorzystuje tylko skalowanie, więc 0,0 odpowiada 0.
Na podstawie określonego parametru „num_bits” w skwantyzowanym typie wyjściowym, program określa minimalne i maksymalne możliwe do przedstawienia skwantyzowane wartości.
np
- [-128, 127] dla znaku, num_bits = 8 lub
- [0, 255] dla bez znaku, num_bits = 8.
Jeżeli range_given == False, początkowe input_min, input_max zostaną określone automatycznie jako wartości minimalna i maksymalna w tensorze wejściowym; w przeciwnym wypadku używane są 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 ekstrema o niskim prawdopodobieństwie rozkładu wejściowego zostały przycięte.
Ta operacja określa maksymalny współczynnik skali, który mapuje początkowy zakres [input_min, input_max] na zakres leżący w reprezentowalnym zakresie skwantyzowanym.
Określa skalę na podstawie jednego z input_min i input_max, a następnie aktualizuje drugą, aby zmaksymalizować zakres możliwy do reprezentacji.
np
- jeśli wyjście jest ze znakiem, num_bits = 8, [input_min, input_max] = [-10,0, 5,0]: użyje współczynnika skali -128 / -10,0 = 12,8 W tym przypadku zaktualizuje input_max do wartości 127 / 12,8 = 9,921875
- jeśli wyjście jest ze znakiem, num_bits = 8, [input_min, input_max] = [-10,0, 10,0]: użyje współczynnika skali 127 / 10,0 = 12,7 W tym przypadku zaktualizuje input_min do wartości 128,0 / 12,7 = -10,07874
- jeśli wyjście jest bez znaku, input_min jest wymuszane jako 0 i używane jest tylko określone input_max.
Po ustaleniu scale_factor i zaktualizowaniu zakresu wejściowego, do każdej wartości w tensorze „wejściowym” stosuje poniższe polecenie.
wyjście = round(clamp(wartość, input_min, input_max) * współczynnik_skali) / współczynnik_skali.
Powyższa funkcja round zaokrągla wartość na podstawie podanego parametru round_mode.
Argumenty:
- zakres: obiekt zakresu
- wejście: Tensor do kwantyzacji, a następnie dekwantyzacji.
- input_min: Jeśli
range_given == True, określa minimalną wartość wejściową, która musi zostać przedstawiona; w przeciwnym razie jest ona ustalana na podstawie wartości minimalnej tensorainput. - input_max: Jeśli
range_given == True, określa maksymalną wartość wejściową, która musi zostać przedstawiona, w przeciwnym razie jest ona ustalana na podstawie wartości maksymalnej tensorainput.
Atrybuty opcjonalne (patrz Attrs ):
- signed_input: Określa, czy kwantyzacja jest ze znakiem czy bez znaku. (właściwie ten parametr powinien nazywać się
signed_output) - num_bits: Szerokość bitowa kwantyzacji.
- range_given: Określa, czy zakres jest podany, czy też powinien zostać określony na podstawie tensora
input. - round_mode: Atrybut „round_mode” kontroluje, który algorytm rozstrzygania remisów jest używany podczas zaokrąglania wartości zmiennoprzecinkowych do ich skwantyzowanych 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ągla w kierunku dodatnim. W tym trybie 7,5 zaokrągla w górę do 8, a -7,5 w górę do -7.
- narrow_range: Jeśli wartość True, to wartość bezwzględna skwantyzowanej wartości minimalnej jest taka sama jak skwantyzowanej wartości maksymalnej, a nie większa o 1. tj. w przypadku kwantyzacji 8-bitowej wartość minimalna wynosi -127 zamiast -128.
- oś: jeśli określono, oś ta jest traktowana jako oś kanału lub wycinka, a dla każdego kanału lub wycinka wzdłuż tej osi używany jest osobny 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 settery atrybutów 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::Input
operator::tensorflow::Input() const
operator::tensorflow::Output
operator::tensorflow::Output() const
Publiczne funkcje statyczne
Oś
Attrs Axis( int64 x )
Wąski zakres
Attrs NarrowRange( bool x )
NumBits
Attrs NumBits( int64 x )
Zakres podany
Attrs RangeGiven( bool x )
Tryb okrągły
Attrs RoundMode( StringPiece x )
Podpisane dane wejściowe
Attrs SignedInput( bool x )