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:

  1. Kwantyzacja tensora do liczb stałoprzecinkowych, które powinny odpowiadać docelowej metodzie kwantyzacji, gdy jest ona używana do wnioskowania.
  2. 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 „num_bits” 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 tensora input .
  • 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 tensora input .

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:

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:: Atrybuty

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

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
)