aliran tensor:: operasi:: QuantizeAndDequantizeV2
#include <array_ops.h>
Mengkuantisasi lalu mendekuantisasi tensor.
Ringkasan
Operasi ini mensimulasikan kehilangan presisi dari forward pass yang terkuantisasi:
- Mengkuantisasi tensor ke angka titik tetap, yang harus sesuai dengan metode kuantisasi target saat digunakan dalam inferensi.
- Mendekuantisasinya kembali ke angka floating point untuk operasi berikutnya, kemungkinan besar matmul.
Ada berbagai cara untuk melakukan kuantisasi. Versi ini hanya menggunakan penskalaan, jadi 0,0 dipetakan ke 0.
Dari 'num_bits' yang ditentukan dalam jenis keluaran terkuantisasi, ini menentukan nilai terkuantisasi minimum dan maksimum yang dapat direpresentasikan.
misalnya
- [-128, 127] untuk ditandatangani, num_bits = 8, atau
- [0, 255] untuk tidak ditandatangani, num_bits = 8.
Jika range_given == False, input_min awal, input_max akan ditentukan secara otomatis sebagai nilai minimum dan maksimum dalam tensor input, jika tidak, nilai input_min, input_max yang ditentukan akan digunakan.
Catatan: Jika input_min, input_max ditentukan, keduanya tidak harus sama dengan nilai minimum dan maksimum aktual di tensor. misalnya dalam beberapa kasus mungkin bermanfaat untuk menentukan nilai-nilai ini sedemikian rupa sehingga probabilitas ekstrim yang rendah dari distribusi masukan terpotong.
Operasi ini menentukan faktor_skala maksimum yang akan memetakan rentang [input_min, input_max] awal ke rentang yang berada dalam rentang terkuantisasi yang dapat diwakili.
Ini menentukan skala dari salah satu input_min dan input_max, lalu memperbarui skala lainnya untuk memaksimalkan rentang yang dapat diwakili.
misalnya
- jika output ditandatangani, num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: akan menggunakan scale_factor -128 / -10.0 = 12.8 Dalam hal ini, input_max akan diperbarui menjadi 127 / 12.8 = 9.921875
- jika output ditandatangani, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: akan menggunakan scale_factor 127 / 10.0 = 12.7 Dalam hal ini, input_min akan diperbarui menjadi 128.0 / 12.7 = -10.07874
- jika output tidak ditandatangani, input_min dipaksa menjadi 0, dan hanya input_max yang ditentukan yang digunakan.
Setelah menentukan faktor_skala dan memperbarui rentang masukan, hal berikut akan diterapkan pada setiap nilai di tensor 'masukan'.
keluaran = bulat(penjepit(nilai, masukan_min, masukan_maks) * faktor_skala) / faktor_skala.
Fungsi putaran di atas membulatkan nilai berdasarkan mode_putaran yang diberikan.
Argumen:
- ruang lingkup: Objek Lingkup
- masukan: Tensor untuk melakukan kuantisasi dan kemudian dekuantisasi.
- input_min: Jika
range_given == True
, ini menentukan nilai masukan minimum yang perlu direpresentasikan, jika tidak maka ditentukan dari nilai min tensorinput
. - input_max: Jika
range_given == True
, ini menentukan nilai masukan maksimum yang perlu direpresentasikan, jika tidak maka ditentukan dari nilai maksimal tensorinput
.
Atribut opsional (lihat Attrs
):
- sign_input: Apakah kuantisasi ditandatangani atau tidak. (sebenarnya parameter ini seharusnya disebut
signed_output
) - num_bits: Bitwidth kuantisasi.
- range_given: Apakah rentang diberikan atau harus ditentukan dari tensor
input
. - round_mode: Atribut 'round_mode' mengontrol algoritma pembulatan tie-breaking mana yang digunakan saat membulatkan nilai float ke padanan terkuantisasinya. Mode pembulatan berikut saat ini didukung:
- HALF_TO_EVEN: ini adalah mode_bulat default.
- HALF_UP: bulat menuju positif. Dalam mode ini 7,5 putaran hingga 8 dan -7,5 putaran hingga -7.
- rentang_sempit: Jika Benar, maka nilai absolut dari nilai minimum yang terkuantisasi sama dengan nilai maksimum yang terkuantisasi, bukannya lebih besar 1. yaitu untuk kuantisasi 8 bit, nilai minimumnya adalah -127, bukan -128.
- sumbu: Jika ditentukan, sumbu ini diperlakukan sebagai sumbu saluran atau irisan, dan rentang kuantisasi terpisah digunakan untuk setiap saluran atau irisan di sepanjang sumbu ini.
Pengembalian:
-
Output
: Tensor keluaran.
Konstruktor dan Destruktor | |
---|---|
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) |
Atribut publik | |
---|---|
operation | |
output |
Fungsi publik | |
---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const |
Fungsi statis publik | |
---|---|
Axis (int64 x) | |
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) |
Struktur | |
---|---|
tensorflow:: ops:: QuantizeAndDequantizeV2:: Attrs | Penyetel atribut opsional untuk QuantizeAndDequantizeV2 . |
Atribut publik
operasi
Operation operation
keluaran
::tensorflow::Output output
Fungsi publik
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 )
simpul
::tensorflow::Node * node() const
operator::tensorflow::Masukan
operator::tensorflow::Input() const
operator::tensorflow::Keluaran
operator::tensorflow::Output() const
Fungsi statis publik
Sumbu
Attrs Axis( int64 x )
Rentang Sempit
Attrs NarrowRange( bool x )
NomorBits
Attrs NumBits( int64 x )
Rentang Diberikan
Attrs RangeGiven( bool x )
Mode Bulat
Attrs RoundMode( StringPiece x )
Masukan yang Ditandatangani
Attrs SignedInput( bool x )