tensor akışı:: işlem:: QuantizeAndDequantizeV2
#include <array_ops.h>
Bir tensörü kuantize eder ve ardından dekuantize eder.
Özet
Bu operasyon, nicelenmiş ileri geçişten kaynaklanan hassasiyet kaybını simüle eder:
- Çıkarımda kullanıldığında hedef niceleme yöntemiyle eşleşmesi gereken tensörün sabit nokta sayılarına nicelenmesi.
- Sonraki operasyonlar için kayan nokta sayılarına geri nicemleme, büyük olasılıkla matmul.
Nicelemenin farklı yolları vardır. Bu sürüm yalnızca ölçeklendirmeyi kullanır, dolayısıyla 0,0, 0 ile eşleşir.
Nicelenmiş çıkış tipinde belirtilen 'num_bits'ten, temsil edilebilir minimum ve maksimum nicelenmiş değerleri belirler.
örneğin
- İmzalı için [-128, 127], num_bits = 8 veya
- İmzasızlar için [0, 255], num_bits = 8.
range_given == False ise, başlangıçtaki input_min, input_max, giriş tensöründeki minimum ve maksimum değerler olarak otomatik olarak belirlenecektir, aksi takdirde belirtilen input_min, input_max değerleri kullanılır.
Not: input_min, input_max belirtilirse bunların tensördeki gerçek minimum ve maksimum değerlere eşit olması gerekmez. örneğin bazı durumlarda, girdi dağılımının düşük olasılıklı uç noktalarının kırpılacağı şekilde bu değerlerin belirtilmesi faydalı olabilir.
Bu işlem, başlangıçtaki [giriş_min, giriş_maks] aralığını temsil edilebilir nicelenmiş aralık içinde yer alan bir aralığa eşleyecek maksimum ölçek_faktörünü belirler.
input_min ve input_max değerlerinden birinin ölçeğini belirler, ardından temsil edilebilir aralığı en üst düzeye çıkarmak için diğerini günceller.
örneğin
- çıkış imzalanmışsa, sayı_bitleri = 8, [input_min, input_max] = [-10,0, 5,0]: -128 / -10,0 = 12,8'lik bir ölçek_faktörü kullanır. Bu durumda, input_max'ı 127 / 12,8 = olacak şekilde günceller 9.921875
- çıkış imzalanmışsa, sayı_bitleri = 8, [input_min, input_max] = [-10,0, 10,0]: 127 / 10,0 = 12,7'lik bir ölçek_faktörü kullanır. Bu durumda, input_min'i 128,0 / 12,7 = -10,07874 olacak şekilde günceller
- çıkış imzasızsa input_min 0 olmaya zorlanır ve yalnızca belirtilen input_max kullanılır.
Scale_factor'u belirledikten ve giriş aralığını güncelledikten sonra, 'giriş' tensöründeki her değere aşağıdakileri uygular.
çıktı = round(clamp(değer, giriş_min, giriş_maks) * ölçek_faktörü) / ölçek_faktörü.
Yukarıdaki round işlevi, verilen round_mode'a göre değeri yuvarlar.
Argümanlar:
- kapsam: Bir Kapsam nesnesi
- giriş: Kuantize edilecek ve ardından dekuantize edilecek tensör .
- input_min:
range_given == True
ise bu, temsil edilmesi gereken minimum giriş değerini belirtir, aksi takdirdeinput
tensörünün minimum değerinden belirlenir. - input_max:
range_given == True
ise bu, temsil edilmesi gereken maksimum giriş değerini belirtir, aksi takdirdeinput
tensörünün maksimum değerinden belirlenir.
İsteğe bağlı özellikler (bkz. Attrs
):
- Signed_input: Nicelemenin imzalı mı yoksa imzasız mı olduğu. (aslında bu
signed_output
olarak adlandırılması gerekirdi) - num_bits: Nicelemenin bit genişliği.
- range_given: Aralığın verilip verilmediği veya
input
tensöründen mi belirleneceği. - round_mode: 'Round_mode' özelliği, float değerleri nicelenmiş eşdeğerlerine yuvarlarken hangi yuvarlama eşitlik bozma algoritmasının kullanıldığını kontrol eder. Şu anda aşağıdaki yuvarlama modları desteklenmektedir:
- HALF_TO_EVEN: bu varsayılan round_mode'dur.
- HALF_UP: pozitife doğru yuvarlar. Bu modda 7,5, 8'e, -7,5 ise -7'ye yuvarlanır.
- dar_aralık: Doğruysa, nicelenmiş minimum değerin mutlak değeri, nicelenmiş maksimum değerle 1 daha büyük olmak yerine aynıdır. yani 8 bit niceleme için minimum değer -128 yerine -127'dir.
İade:
-
Output
: Çıkış tensörü.
Yapıcılar ve Yıkıcılar | |
---|---|
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max) | |
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs) |
Genel özellikler | |
---|---|
operation | |
output |
Kamu işlevleri | |
---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const |
Genel statik işlevler | |
---|---|
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) |
Yapılar | |
---|---|
tensorflow:: ops:: QuantizeAndDequantizeV2:: Öznitelikler | QuantizeAndDequantizeV2 için isteğe bağlı öznitelik ayarlayıcılar. |
Genel özellikler
operasyon
Operation operation
çıktı
::tensorflow::Output output
Kamu işlevleri
QuantizeAndDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
QuantizeAndDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs )
düğüm
::tensorflow::Node * node() const
operatör::tensorflow::Giriş
operator::tensorflow::Input() const
operatör::tensorflow::Çıktı
operator::tensorflow::Output() const
Genel statik işlevler
Dar Aralık
Attrs NarrowRange( bool x )
NumBits
Attrs NumBits( int64 x )
Verilen Aralık
Attrs RangeGiven( bool x )
YuvarlakMod
Attrs RoundMode( StringPiece x )
İmzalıGiriş
Attrs SignedInput( bool x )