tensorflow::ops::QuantizeV2
#include <array_ops.h>'Girdi' tensörünü (float türünde) 'çıktı' tensörüne (T türünde) dönüştürün.
Özet
[min_range, max_range], 'giriş' verileri için aralığı belirten skalar kayan noktalı sayılardır. 'mode' özniteliği, kayan noktalı değerleri nicelleştirilmiş karşılıklarına dönüştürmek için hangi hesaplamaların kullanılacağını tam olarak kontrol eder. 'round_mode' özniteliği, kayan noktalı değerleri nicelleştirilmiş karşılıklarına yuvarlarken hangi yuvarlama algoritmasının kullanılacağını kontrol eder.
'MIN_COMBINED' modunda, tensörün her değeri aşağıdaki işlemlere tabi tutulacaktır:
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
MIN_COMBINED Modu Örneği
Girişin float türünde ve [0.0, 6.0] aralığında olabileceğini, çıkışın ise quint8 ([0, 255]) türünde olduğunu varsayalım. min_range ve max_range değerleri sırasıyla 0.0 ve 6.0 olarak belirtilmelidir. float'tan quint8'e dönüştürme işlemi, girişin her değerini 255/6 ile çarpacak ve quint8'e dönüştürecektir.
Çıktı türü qint8 ([-128, 127]) ise, dönüştürmeden önce her değerden 128 çıkarılarak değer aralığı qint8'in aralığıyla uyumlu hale getirilir.
Mod 'MIN_FIRST' ise, şu 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())
Bu yöntem ile MIN_COMBINED arasındaki en büyük fark, minimum aralığın önce yuvarlanması ve ardından yuvarlanmış değerden çıkarılmasıdır. MIN_COMBINED ile, tekrarlanan nicelleştirme ve nicelleştirmeyi kaldırma işlemleri daha büyük ve daha büyük bir hataya yol açacağından küçük bir sapma oluşur.
Ölçeklendirilmiş mod Örneği
SCALED modu QuantizeAndDequantize{V2|V3} içinde kullanılan niceleme yaklaşımıyla eşleşir.
Eğer mod SCALED ise, çıktı türünün tam aralığını kullanmayız ve simetri için mümkün olan en düşük değeri atlarız (örneğin, işaretli 8 bit niceleme için çıktı aralığı -128 ila 127 değil, -127 ila 127'dir), böylece 0.0, 0'a eşlenir.
Öncelikle tensörümüzdeki değer aralığını buluyoruz. Kullandığımız aralık her zaman 0 merkezlidir, bu nedenle m'yi şu şekilde buluyoruz:
m = max(abs(input_min), abs(input_max))
Giriş tensörümüzün aralığı o halde [-m, m] olur.
Ardından, sabit noktalı niceleme aralıklarımızı [min_fixed, max_fixed] seçiyoruz. Eğer T işaretli ise, bu şöyledir:
num_bits = sizeof(T) * 8
[min_fixed, max_fixed] =
[-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]Aksi takdirde, eğer T işaretsiz ise, sabit nokta aralığı şöyledir:
[min_fixed, max_fixed] = [0, (1 << num_bits) - 1]
Buradan ölçeklendirme faktörümüzü, s'yi hesaplıyoruz:
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 hafifçe ayarlamayı seçebilmesidir; bu nedenle, daha sonraki hesaplamalar için her zaman çıkış portlarını aralık olarak kullanmalısınız. Örneğin, istenen minimum ve maksimum değerler birbirine yakınsa, hatalı nicelenmiş tamponların oluşturulmasını önlemek için küçük bir epsilon değeriyle ayrılacaklardır. Aksi takdirde, tüm nicelenmiş değerlerin aynı kayan nokta değerine eşlendiği tamponlar elde edebilirsiniz; bu da üzerinde daha fazla hesaplama yapması gereken işlemler için sorunlara neden olur.
Argümanlar:
- kapsam: Bir Kapsam nesnesi
- min_range: Girdi için üretilebilecek en küçük skalar değer.
- max_range: Giriş için üretilebilecek maksimum skalar değer.
İadeler:
-
Output: Kayan noktalı girişten üretilen nicelleştirilmiş veri. -
Output: Çıktı için kullanılan gerçek minimum skalar değer. -
Output: Çıktı için kullanılan gerçek maksimum skalar 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 | |
Herkese açık statik fonksiyonlar | |
|---|---|
Mode (StringPiece x) | |
RoundMode (StringPiece x) | |
Yapılar | |
|---|---|
| tensorflow::ops::QuantizeV2::Attrs | QuantizeV2 için isteğe bağlı özellik ayarlayıcıları. |
Genel özellikler
operasyon
Operation operation
çıktı
::tensorflow::Output output
çıktı_maks
::tensorflow::Output output_max
çıktı_minimum
::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 )
Herkese açık statik fonksiyonlar
Mod
Attrs Mode( StringPiece x )
Yuvarlak Mod
Attrs RoundMode( StringPiece x )