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 tensördeki gerçek minimum ve maksimum değerlere eşit olmaları 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 daha sonra dekuantize edilecek tensör .
- input_min:
range_given == True
ise, 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.
- eksen: Belirtilirse, bu eksen bir kanal veya dilim ekseni olarak ele alınır ve bu eksen boyunca her kanal veya dilim için ayrı bir niceleme aralığı kullanılır.
İ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 | |
---|---|
Axis (int64 x) | |
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
Eksen
Attrs Axis( int64 x )
Dar Aralık
Attrs NarrowRange( bool x )
NumBits
Attrs NumBits( int64 x )
Verilen Aralık
Attrs RangeGiven( bool x )
Yuvarlak Mod
Attrs RoundMode( StringPiece x )
İmzalıGiriş
Attrs SignedInput( bool x )