Quantize

halka açık final sınıfı Quantize

Float tipindeki 'giriş' tensörünü 'T' tipindeki 'çıkış' tensörüne niceliklendirin.

[min_aralık, maksimum_aralık], 'giriş' verilerinin aralığını belirten skaler değişkenlerdir. 'Mode' özelliği, kayan değer değerlerini nicelenmiş eşdeğerlerine dönüştürmek için tam olarak hangi hesaplamaların kullanıldığını kontrol eder. 'Round_mode' özelliği, kayan değer değerlerinin nicelenmiş eşdeğerlerine yuvarlanmasında hangi yuvarlama eşitlik bozma algoritmasının kullanılacağını kontrol eder.

'MIN_COMBINED' modunda, tensörün her değeri aşağıdaki işlemlerden geçecektir:

out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
 if T == qint8: out[i] -= (range(T) + 1) / 2.0
 
burada `range(T) = numeric_limits ::max() - sayısal_limitler ::dakika()`

MIN_COMBINED Mod Örneği

Girişin float tipinde olduğunu ve olası bir [0.0, 6.0] aralığına sahip olduğunu ve çıkış tipinin quint8 ([0, 255]) olduğunu varsayalım. Min_range ve max_range değerleri 0,0 ve 6,0 olarak belirtilmelidir. Float'tan quint8'e niceleme yapmak, girişin her değerini 255/6 ile çarpacak ve quint8'e dönüştürecektir.

Çıkış türü qint8 ([-128, 127]) ise işlem, değer aralığının qint8 aralığıyla aynı hizada olması için dönüştürmeden önce her değeri ek olarak 128 oranında çıkaracaktır.

Mod 'MIN_FIRST' ise bu yaklaşım kullanılır:

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())
 
Bununla MIN_COMBINED arasındaki en büyük fark, yuvarlanmış değerden çıkarılmadan önce minimum aralığın ilk olarak yuvarlanmasıdır. MIN_COMBINED ile, kuantizasyon ve dekuantizasyon işlemlerinin tekrarlanan yinelemelerinin gittikçe daha büyük bir hataya yol açacağı küçük bir sapma ortaya çıkar.

ÖLÇEKLİ mod Örnek

'SCALED' modu, 'QuantizeAndDequantize{V2|V3}'de kullanılan niceleme yaklaşımıyla eşleşir.

Mod "ÖLÇEKLİ" ise niceleme, her giriş değerinin bir ölçeklendirme_faktörü ile çarpılmasıyla gerçekleştirilir. Ölçekleme_faktörü "min_aralık" ve "maks_aralık"tan mümkün olduğu kadar büyük olacak şekilde belirlenir, böylece "min_aralık" ile "maks_aralık" aralığı T tipi değerler içinde temsil edilebilir.

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);
 
Daha sonra min_aralığı ayarlamak için ölçek_faktörünü kullanırız ve max_range şu şekildedir:
min_range = min_T / scale_factor;
       max_range = max_T / scale_factor;
 
örneğin T = qint8 ve başlangıçta min_range = -10 ve max_range = 9 ise, -128/-10,0 = 12,8 ile 127/9,0 = 14,11'i karşılaştırırız ve scaling_factor = 12,8'i ayarlarız. Bu durumda min_range -10 olarak kalır ancak max_range 127 / 12,8 = 9,921875 olarak ayarlanır

Dolayısıyla (-10, 9,921875) ila (-128, 127) aralığındaki giriş değerlerini nicelendireceğiz.

Giriş tensörü artık değerlerin "min_aralık" ila "maks_aralık" aralığına kırpılması ve ardından aşağıdaki gibi ölçek_faktörü ile çarpılmasıyla nicelendirilebilir:

result = round(min(max_range, max(min_range, input)) * scale_factor)
 
Ayarlanan "min_aralık" ve "maks_aralık", bu işlemin 2 ve 3 numaralı çıkışları olarak döndürülür . Bu çıktılar daha sonraki hesaplamalar için aralık olarak kullanılmalıdır.

dar_aralık (bool) özelliği

Eğer doğruysa, minimum nicelenmiş değeri kullanmayız. yani int8 için nicelenmiş çıktı, tam -128..127 aralığı yerine -127..127 aralığıyla sınırlandırılacaktır. Bu, belirli çıkarım arka uçlarıyla uyumluluk için sağlanmıştır. (Yalnızca ÖLÇEKLİ mod için geçerlidir)

eksen (int) niteliği

İsteğe bağlı bir "eksen" özelliği, giriş tensörünün bir boyut indeksini belirtebilir, böylece nicemleme aralıkları, bu boyut boyunca tensörün her dilimi için ayrı ayrı hesaplanacak ve uygulanacaktır. Bu, kanal başına nicemleme için kullanışlıdır.

Eksen belirtilirse min_range ve max_range

eğer 'axis'=Yok ise, tensör başına nicemleme normal şekilde gerçekleştirilir.

Provid_minimum_range (float) özelliği

Minimum niceleme aralığının en az bu değer olmasını sağlar. Bunun eski varsayılan değeri 0,01'dir, ancak yeni kullanımlar için bu değerin 0'a ayarlanması önemle tavsiye edilir.

İç İçe Sınıflar

sınıf Niceleme.Seçenekler Quantize için isteğe bağlı özellikler

Sabitler

Sicim OP_NAME Bu operasyonun TensorFlow çekirdek motoru tarafından bilinen adı

Genel Yöntemler

Statik Niceleme.Seçenekler
eksen (Uzun eksen)
statik <T TType'ı genişletir > Niceleme <T>
create ( Kapsam kapsamı, İşlenen < TFloat32 > giriş, İşlenen < TFloat32 > minRange, İşlenen < TFloat32 > maxRange, Class<T> T, Seçenekler... seçenekler)
Yeni bir Quantize işlemini saran bir sınıf oluşturmaya yönelik fabrika yöntemi.
Statik Niceleme.Seçenekler
ProvidingMinimumRange (Float ProvidingMinimumRange)
Statik Niceleme.Seçenekler
modu (Dize modu)
Statik Niceleme.Seçenekler
darRange (Boolean darRange)
Çıkış <T>
çıktı ()
Float girişinden üretilen nicelenmiş veriler.
Çıkış < TFloat32 >
çıktıMaksimum ()
Giriş değerlerini ölçeklendirmeden ve nicelenmiş değerlere yuvarlamadan önce kırpmak için kullanılan maksimum nihai niceleme aralığı.
Çıkış < TFloat32 >
çıktıMin ()
Giriş değerlerini ölçeklemeden ve nicelenmiş değerlere yuvarlamadan önce kırpmak için kullanılan minimum son niceleme aralığı.
Statik Niceleme.Seçenekler
roundMode (Dize roundMode)

Kalıtsal Yöntemler

Sabitler

genel statik son Dize OP_NAME

Bu operasyonun TensorFlow çekirdek motoru tarafından bilinen adı

Sabit Değer: "QuantizeV2"

Genel Yöntemler

public static Quantize.Options ekseni (Uzun eksen)

public static Niceleme <T> create ( Kapsam kapsamı, İşlenen < TFloat32 > giriş, İşlenen < TFloat32 > minRange, İşlenen < TFloat32 > maxRange, Sınıf<T> T, Seçenekler... seçenekler)

Yeni bir Quantize işlemini saran bir sınıf oluşturmaya yönelik fabrika yöntemi.

Parametreler
kapsam mevcut kapsam
minAralık Kuantizasyon aralığının minimum değeri. Bu değer diğer parametrelere bağlı olarak op tarafından ayarlanabilir. Ayarlanan değer “output_min”e yazılır. 'Eksen' özelliği belirtilirse, bu, boyutu giriş ve çıkış tensörlerinin 'eksen' boyutuyla eşleşen 1 boyutlu bir tensör olmalıdır.
maksimum aralık Niceleme aralığının maksimum değeri. Bu değer diğer parametrelere bağlı olarak op tarafından ayarlanabilir. Ayarlanan değer “output_max”a yazılır. 'Eksen' özelliği belirtilirse, bu, boyutu giriş ve çıkış tensörlerinin 'eksen' boyutuyla eşleşen 1 boyutlu bir tensör olmalıdır.
seçenekler isteğe bağlı nitelik değerlerini taşır
İadeler
  • Quantize'ın yeni bir örneği

public static Quantize.Options ProvidMinimumRange (Float ProvidMinimumRange)

public static Quantize.Options modu (Dize modu)

public static Quantize.Options darRange (Boolean darRange)

genel Çıkış <T> çıkışı ()

Float girişinden üretilen nicelenmiş veriler.

genel Çıkış < TFloat32 > çıktıMax ()

Giriş değerlerini ölçeklendirmeden ve nicelenmiş değerlere yuvarlamadan önce kırpmak için kullanılan maksimum nihai niceleme aralığı. 'Eksen' özelliği belirtilirse, bu, boyutu giriş ve çıkış tensörlerinin 'eksen' boyutuyla eşleşen 1 boyutlu bir tensör olacaktır.

genel Çıkış < TFloat32 > çıktıMin ()

Giriş değerlerini ölçeklendirmeden ve nicelenmiş değerlere yuvarlamadan önce kırpmak için kullanılan minimum son niceleme aralığı. 'Eksen' özelliği belirtilirse, bu, boyutu giriş ve çıkış tensörlerinin 'eksen' boyutuyla eşleşen 1 boyutlu bir tensör olacaktır.

public static Quantize.Options roundMode (String roundMode)