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:

  1. Kwantowanie tensora do liczb stałoprzecinkowych, które powinny odpowiadać docelowej metodzie kwantyzacji, gdy jest stosowana we wnioskowaniu.
  2. 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 tensora input .
  • 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 tensora input .

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.

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

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

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
)