tensor akışı:: işlem:: QuantizeV2
#include <array_ops.h>
Float tipindeki 'giriş' tensörünü 'T' tipindeki 'çıkış' tensörüne niceliklendirin.
Özet
[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() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
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::min() quantized = max(quantized, numeric_limits ::min()) quantized = min(quantized, numeric_limits ::max())
Bununla MIN_COMBINED arasındaki en büyük fark, yuvarlanmış değerden çıkarılmadan önce minimum aralığın önce 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 SCALED
ise, niceleme her giriş değerinin bir ölçeklendirme_faktörü ile çarpılmasıyla gerçekleştirilir. Ölçekleme_faktörü, min_range
ve max_range
arasından, min_range
ile max_range
arasındaki 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::min(); const int max_T = std::numeric_limits ::max(); const float max_float = std::numeric_limits ::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_range ve max_range'ı aşağıdaki gibi ayarlamak için Scale_factor'u kullanırız:
min_range = min_T / scale_factor; max_range = max_T / scale_factor;örneğin T = qint8 ve başlangıçta min_aralık = -10 ve maksimum_aralık = 9 ise, -128/-10,0 = 12,8 ile 127/9,0 = 14,11'i karşılaştırırız ve ölçeklendirme_faktörü = 12,8'i ayarlarız. Bu durumda min_aralık -10 olarak kalır, ancak max_range 127/12,8 = 9,921875 olarak ayarlanacaktı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_range
ilamax_range
aralığına kırpılması ve ardından aşağıdaki şekilde ölçek_faktörü ile çarpılmasıyla nicelendirilebilir:
result = round(min(max_range, max(min_range, input)) * scale_factor)Ayarlanan
min_range
vemax_range
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
axis
özelliği, giriş tensörünün bir boyut indeksini belirleyebilir; 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
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.
Argümanlar:
- kapsam: Bir Kapsam nesnesi
- min_range: Niceleme aralığının minimum değeri. Bu değer diğer parametrelere bağlı olarak op tarafından ayarlanabilir. Ayarlanan değer
output_min
yazılır.axis
niteliği belirtilirse bu, boyutu giriş ve çıkış tensörlerininaxis
boyutuyla eşleşen 1 boyutlu bir tensör olmalıdır. - max_range: 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
yazılır.axis
niteliği belirtilirse bu, boyutu giriş ve çıkış tensörlerininaxis
boyutuyla eşleşen 1 boyutlu bir tensör olmalıdır.
İadeler:
-
Output
çıkışı: Float girişinden üretilen nicelenmiş veriler. -
Output
Output_min: Giriş değerlerini ölçeklendirmeden ve nicelenmiş değerlere yuvarlamadan önce kırpmak için kullanılan minimum son niceleme aralığı.axis
niteliği belirtilirse bu, boyutu giriş ve çıkış tensörlerininaxis
boyutuyla eşleşen 1 boyutlu bir tensör olacaktır. -
Output
Output_max: Giriş değerlerini ölçeklendirmeden ve nicelenmiş değerlere yuvarlamadan önce kırpmak için kullanılan maksimum nihai niceleme aralığı.axis
niteliği belirtilirse bu, boyutu giriş ve çıkış tensörlerininaxis
boyutuyla eşleşen 1 boyutlu bir tensör olacaktır.
Yapıcılar ve Yıkıcılar | |
---|---|
QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T) | |
QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T, const QuantizeV2::Attrs & attrs) |
Genel özellikler | |
---|---|
operation | |
output | |
output_max | |
output_min |
Genel statik işlevler | |
---|---|
Axis (int64 x) | |
EnsureMinimumRange (float x) | |
Mode (StringPiece x) | |
NarrowRange (bool x) | |
RoundMode (StringPiece x) |
Yapılar | |
---|---|
tensorflow:: ops:: QuantizeV2:: Öznitelikler | QuantizeV2 için isteğe bağlı öznitelik ayarlayıcılar. |
Genel özellikler
operasyon
Operation operation
çıktı
::tensorflow::Output output
çıktı_maks
::tensorflow::Output output_max
çıktı_dakika
::tensorflow::Output output_min
Kamu işlevleri
QuantizeV2
QuantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, DataType T )
QuantizeV2
QuantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, DataType T, const QuantizeV2::Attrs & attrs )
Genel statik işlevler
Eksen
Attrs Axis( int64 x )
Minimum Aralık Sağlayın
Attrs EnsureMinimumRange( float x )
Mod
Attrs Mode( StringPiece x )
Dar Aralık
Attrs NarrowRange( bool x )
YuvarlakMod
Attrs RoundMode( StringPiece x )