Kwantyzuj tensor „wejściowy” typu float do tensora „wyjściowego” typu „T”.
[min_range, max_range] to skalarne liczby zmiennoprzecinkowe, które określają zakres danych „wejściowych”. Atrybut „mode” dokładnie kontroluje, które obliczenia są używane do konwersji wartości zmiennoprzecinkowych na ich skwantowane odpowiedniki. 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.
W trybie „MIN_COMBINED” każda wartość tensora zostanie poddana następującym czynnościom:
out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
 if T == qint8: out[i] -= (range(T) + 1) / 2.0
 Przykład trybu MIN_COMBINED
Załóżmy, że wejście jest typu float i ma możliwy zakres [0,0, 6,0], a typ wyjścia to quint8 ([0, 255]). Wartości min_range i max_range należy określić jako 0,0 i 6,0. Kwantyzacja od float do quint8 spowoduje pomnożenie każdej wartości wejściowej przez 255/6 i rzutowanie do quint8.
Jeśli typem wyniku był qint8 ([-128, 127]), operacja dodatkowo odejmie każdą wartość o 128 przed rzutowaniem, tak aby zakres wartości pokrywał się z zakresem qint8.
Jeśli tryb to „MIN_FIRST”, stosowane jest następujące podejście:
num_discrete_values = 1 << (# of bits in T)
 range_adjust = num_discrete_values / (num_discrete_values - 1)
 range = (range_max - range_min) * range_adjust
 range_scale = num_discrete_values / range
 quantized = round(input * range_scale) - round(range_min * range_scale) +
   numeric_limits<T>::min()
 quantized = max(quantized, numeric_limits<T>::min())
 quantized = min(quantized, numeric_limits<T>::max())
 Tryb SKALOWANY Przykład
Tryb `SCALED` odpowiada podejściu kwantyzacji zastosowanemu w `QuantizeAndDequantize{V2|V3}`.
Jeśli tryb to „SKALOWANY”, kwantyzacja jest wykonywana poprzez pomnożenie każdej wartości wejściowej przez współczynnik skalowania. Współczynnik skalowania jest określany na podstawie „min_range” i „max_range” tak, aby był jak największy, tak aby zakres od „min_range” do „max_range” był reprezentowany w wartościach typu T.
const int min_T = std::numeric_limits<T>::min();
   const int max_T = std::numeric_limits<T>::max();
   const float max_float = std::numeric_limits<float>::max();
 
   const float scale_factor_from_min_side =
       (min_T * min_range > 0) ? min_T / min_range : max_float;
   const float scale_factor_from_max_side =
       (max_T * max_range > 0) ? max_T / max_range : max_float;
 
   const float scale_factor = std::min(scale_factor_from_min_side,
                                       scale_factor_from_max_side);
 min_range = min_T / scale_factor;
       max_range = max_T / scale_factor;
 Zatem będziemy kwantyzować wartości wejściowe w zakresie (-10, 9,921875) do (-128, 127).
Tensor wejściowy można teraz skwantować, przycinając wartości do zakresu od „min_zakres” do „maksymalny_zakres”, a następnie mnożąc przez współczynnik skali w następujący sposób:
result = round(min(max_range, max(min_range, input)) * scale_factor)
 atrybut wąskiego zakresu (bool).
Jeśli to prawda, nie używamy minimalnej wartości skwantowanej. tj. dla int8 skwantowane wyjście byłoby ograniczone do zakresu -127..127 zamiast pełnego zakresu -128..127. Zapewnia to zgodność z niektórymi narzędziami wnioskowania. (Dotyczy tylko trybu SKALOWANEGO)
atrybut osi (int).
Opcjonalny atrybut `axis` może określać indeks wymiaru tensora wejściowego, tak że zakresy kwantyzacji będą obliczane i stosowane oddzielnie dla każdego wycinka tensora wzdłuż tego wymiaru. Jest to przydatne w przypadku kwantyzacji na kanał.
Jeśli określono oś, min_range i max_range
jeśli „oś” = Brak, kwantyzacja na tensor jest wykonywana normalnie.
atrybut zapewnienia_minimum_zakresu (float).
Zapewnia, że minimalny zakres kwantyzacji wynosi co najmniej tę wartość. Starsza wartość domyślna to 0,01, ale zdecydowanie zaleca się ustawienie jej na 0 w przypadku nowych zastosowań.
Klasy zagnieżdżone
| klasa | Kwantyzacja.Opcje | Opcjonalne atrybuty Quantize | |
Stałe
| Smyczkowy | OP_NAME | Nazwa tej operacji znana silnikowi rdzenia TensorFlow | 
Metody publiczne
| statyczna kwantyzacja.Opcje |  oś (oś długa) | 
| statyczny <T rozszerza TType > Kwantyzacja <T> | |
| statyczna kwantyzacja.Opcje |  zapewnieniaMinimumRange (Float zapewnieniaMinimumRange) | 
| statyczna kwantyzacja.Opcje |  tryb (tryb ciągowy) | 
| statyczna kwantyzacja.Opcje |  wąski zakres (Boolean wąski zakres) | 
| Wyjście <T> |  wyjście ()  Skwantowane dane generowane na podstawie sygnału wejściowego typu float. | 
| Dane wyjściowe <TFloat32> |  moc wyjściowaMaks . ()  Maksimum końcowego zakresu kwantyzacji, używane do obcinania wartości wejściowych przed skalowaniem i zaokrąglaniem ich do wartości skwantowanych. | 
| Dane wyjściowe <TFloat32> |  wyjścieMin ()  Minimum końcowego zakresu kwantyzacji, używane do obcinania wartości wejściowych przed skalowaniem i zaokrąglaniem ich do wartości skwantowanych. | 
| statyczna kwantyzacja.Opcje |  roundMode (String roundMode)  | 
Metody dziedziczone
Stałe
publiczny statyczny końcowy ciąg znaków OP_NAME
Nazwa tej operacji znana silnikowi rdzenia TensorFlow
Metody publiczne
public static Quantize <T> create ( Zakres zakresu, Operand < TFloat32 > wejście, Operand < TFloat32 > minRange, Operand < TFloat32 > maxRange, Class<T> T, Opcje... opcje)
Metoda fabryczna służąca do tworzenia klasy opakowującej nową operację kwantyzacji.
Parametry
| zakres | aktualny zakres | 
|---|---|
| minZakres | Minimalna wartość zakresu kwantyzacji. Wartość ta może być regulowana przez operatora w zależności od innych parametrów. Ustawiona wartość jest zapisywana w `output_min`. Jeśli określono atrybut „oś”, musi to być tensor 1-D, którego rozmiar odpowiada wymiarowi „osi” tensorów wejściowego i wyjściowego. | 
| Maks.Zakres | Maksymalna wartość zakresu kwantyzacji. Wartość ta może być regulowana przez operatora w zależności od innych parametrów. Ustawiona wartość jest zapisywana w `output_max`. Jeśli określono atrybut „oś”, musi to być tensor 1-D, którego rozmiar odpowiada wymiarowi „osi” tensorów wejściowego i wyjściowego. | 
| opcje | przenosi opcjonalne wartości atrybutów | 
Powroty
- nowa instancja Quantize
publiczne wyjście <T> wyjście ()
Skwantowane dane generowane na podstawie sygnału wejściowego typu float.
publiczne wyjście < TFloat32 > wyjścieMax ()
Maksimum końcowego zakresu kwantyzacji, używane do obcinania wartości wejściowych przed skalowaniem i zaokrąglaniem ich do wartości skwantowanych. Jeśli określono atrybut „oś”, będzie to tensor 1-D, którego rozmiar odpowiada wymiarowi „osi” tensorów wejściowego i wyjściowego.
publiczne wyjście < TFloat32 > wyjścieMin ()
Minimum końcowego zakresu kwantyzacji, używane do obcinania wartości wejściowych przed skalowaniem i zaokrąglaniem ich do wartości skwantowanych. Jeśli określono atrybut „oś”, będzie to tensor 1-D, którego rozmiar odpowiada wymiarowi „osi” tensorów wejściowego i wyjściowego.