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
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, girişin her değerini 255/6 ile çarpacak ve quint8'e dönüştürülecektir.
Çı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())
Ö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, "min_aralık"tan "maks_aralık"a kadar olan aralığın T tipi değerler içinde temsil edilebileceği şekilde mümkün olduğu kadar büyük olacak şekilde belirlenir.
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;
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)
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ı, o 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> | |
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çeklendirmeden 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ı
Genel Yöntemler
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 |
İade
- Quantize'ın yeni bir örneği
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.