tensorflow :: ops :: QuantizeV2
#include <array_ops.h>
Float tipinin 'giriş' tensörünü 'T' tipi 'çıkış' tensörüne nicelendirin.
Özet
[min_aralık, maks_aralık], 'giriş' verileri için aralığı belirten skaler kayan değerlerdir. 'Mode' özelliği, float değerlerini nicelleştirilmiş eşdeğerlerine dönüştürmek için tam olarak hangi hesaplamaların kullanıldığını kontrol eder. 'Round_mode' özniteliği, float değerleri nicelleştirilmiş eşdeğerlerine yuvarlanırken hangi yuvarlama bağ-kırma algoritmasının kullanılacağını denetler.
'MIN_COMBINED' modunda, tensörün her bir değeri aşağıdakilerden geçecektir:
out[i] = (in[i] - min_range) * range(T) / (max_range - min_range) if T == qint8: out[i] -= (range(T) + 1) / 2.0
buradaki 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 Modu Örneği
Girişin float türü olduğunu ve [0.0, 6.0] olası aralığına sahip olduğunu ve çıktı türünün quint8 ([0, 255]) olduğunu varsayın. Min_range ve max_range değerleri 0.0 ve 6.0 olarak belirtilmelidir. Float'tan quint8'e niceleme, girdinin her bir değerini 255/6 ile çarpar ve quint8'e çevirir.
Çıktı türü qint8 ([-128, 127]) ise, işlem, dökümden önce her bir değeri ek olarak 128 çıkaracaktır, böylece değerler aralığı qint8 aralığıyla aynı hizaya gelir.
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, minimum aralığın yuvarlanan değerden çıkarılmadan önce yuvarlanmasıdır. MIN_COMBINED ile, tekrarlanan niceleme ve kod çözme yinelemelerinin daha büyük ve daha büyük bir hataya yol açacağı küçük bir önyargı ortaya çıkar.
SCALED modu Örnek
SCALED
modu, QuantizeAndDequantize{V2|V3}
kullanılan niceleme yaklaşımıyla eşleşir.
Mod SCALED
ise, çıkış türünün tüm aralığını kullanmayız, simetri için mümkün olan en düşük değeri seçmeyi seçeriz (örneğin, işaretli 8 bit nicemleme için çıkış aralığı -127 ila 127, -128 ila 127 değil), böylece 0.0, 0 ile eşleşir.
Önce tensörümüzde değerlerin aralığını buluruz. Kullandığımız aralık her zaman 0 merkezlidir, bu nedenle m'yi öyle buluruz
m = max(abs(input_min), abs(input_max))
Giriş tensör aralığımız bu durumda [-m, m]
.
Sonra, sabit nokta niceleme kovalarımızı [min_fixed, max_fixed]
. T imzalanmışsa, bu
num_bits = sizeof(T) * 8 [min_fixed, max_fixed] = [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]
Aksi takdirde, T işaretsiz ise, sabit nokta aralığı
[min_fixed, max_fixed] = [0, (1 << num_bits) - 1]
Bundan ölçekleme faktörümüzü hesaplıyoruz, s:
s = (max_fixed - min_fixed) / (2 * m)
Şimdi tensörümüzün elemanlarını nicelleştirebiliriz:
result = round(input * s)
Dikkat edilmesi gereken bir nokta, operatörün niceleme işlemi sırasında istenen minimum ve maksimum değerleri biraz ayarlamayı seçebilmesidir, bu nedenle daha sonraki hesaplamalar için aralık olarak her zaman çıkış portlarını kullanmanız gerekir. Örneğin, istenen minimum ve maksimum değerler eşite yakınsa, hatalı biçimlendirilmiş nicelleştirilmiş tamponların oluşturulmasını önlemek için küçük bir epsilon değeriyle ayrılacaktır. Aksi takdirde, tüm nicelenmiş değerlerin aynı kayan değerle eşleştiği tamponlarla sonuçlanabilir, bu da üzerlerinde daha fazla hesaplama yapmak zorunda olan işlemler için sorunlara neden olur.
Argümanlar:
- kapsam: Bir Scope nesnesi
- min_range: Giriş için muhtemelen üretilmiş minimum skaler değer.
- maks_aralık: Giriş için muhtemelen üretilen maksimum skaler değer.
İadeler:
-
Output
çıktısı: Float girdisinden üretilen nicelleştirilmiş veriler. -
Output
output_min:Output
için kullanılan gerçek minimum skaler değer. -
Output
output_max:Output
için kullanılan gerçek maksimum skaler değer.
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 | |
---|---|
Mode (StringPiece x) | |
RoundMode (StringPiece x) |
Yapılar | |
---|---|
tensorflow :: ops :: QuantizeV2 :: Attrs | QuantizeV2 için isteğe bağlı öznitelik belirleyiciler. |
Genel özellikler
operasyon
Operation operation
çıktı
::tensorflow::Output output
output_max
::tensorflow::Output output_max
output_min
::tensorflow::Output output_min
Kamusal işlevler
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
Mod
Attrs Mode( StringPiece x )
RoundMode
Attrs RoundMode( StringPiece x )