tensör 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'ı ayarlamak için Scale_factor'u aşağıdaki gibi 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
ila max_range
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_range
ve max_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 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
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.
İade:
-
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 )