tensorflow::ops::QuantizeAndDequantizeV2
#include <array_ops.h>Mengkuantisasi lalu mendekuantisasi tensor.
Ringkasan
Operasi ini mensimulasikan hilangnya presisi dari proses forward pass terkuantisasi dengan cara:
- Mengkuantisasi tensor ke angka titik tetap, yang harus sesuai dengan metode kuantisasi target saat digunakan dalam inferensi.
- Mengembalikannya ke bentuk bilangan floating point untuk operasi selanjutnya, kemungkinan besar matmul.
Ada berbagai cara untuk melakukan kuantisasi. Versi ini hanya menggunakan penskalaan, sehingga 0,0 dipetakan ke 0.
Berdasarkan 'num_bits' yang ditentukan dalam tipe keluaran terkuantisasi, ia menentukan nilai terkuantisasi minimum dan maksimum yang dapat direpresentasikan.
misalnya
- [-128, 127] untuk bilangan bertanda, num_bits = 8, atau
- [0, 255] untuk tidak bertanda, num_bits = 8.
Jika range_given == False, nilai awal input_min dan input_max akan ditentukan secara otomatis sebagai nilai minimum dan maksimum dalam tensor input, jika tidak, nilai input_min dan input_max yang ditentukan akan digunakan.
Catatan: Jika input_min dan input_max ditentukan, nilai tersebut tidak perlu sama dengan nilai minimum dan maksimum sebenarnya dalam tensor. Misalnya, dalam beberapa kasus, mungkin bermanfaat untuk menentukan nilai-nilai ini sehingga nilai ekstrem dengan probabilitas rendah dari distribusi input dapat dipangkas.
Operasi ini menentukan scale_factor maksimum yang akan memetakan rentang [input_min, input_max] awal ke rentang yang berada di dalam rentang kuantisasi yang dapat direpresentasikan.
Fungsi ini menentukan skala dari salah satu input_min dan input_max, kemudian memperbarui yang lainnya untuk memaksimalkan rentang yang dapat direpresentasikan.
misalnya
- Jika outputnya bertanda, num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: maka akan menggunakan scale_factor sebesar -128 / -10.0 = 12.8. Dalam hal ini, maka input_max akan diperbarui menjadi 127 / 12.8 = 9.921875.
- Jika outputnya bertanda, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: maka akan menggunakan scale_factor sebesar 127 / 10.0 = 12.7. Dalam hal ini, maka input_min akan diperbarui menjadi 128.0 / 12.7 = -10.07874.
- Jika outputnya tidak bertanda (unsigned), maka input_min dipaksa menjadi 0, dan hanya input_max yang ditentukan yang digunakan.
Setelah menentukan scale_factor dan memperbarui rentang input, ia menerapkan hal berikut pada setiap nilai dalam tensor 'input'.
output = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.
Fungsi pembulatan di atas membulatkan nilai berdasarkan round_mode yang diberikan.
Argumen:
- Cakupan: Objek Cakupan
- Input: Tensor yang akan dikuantisasi dan kemudian didekuantisasi.
- input_min: Jika
range_given == True, ini menentukan nilai input minimum yang perlu direpresentasikan, jika tidak, nilai tersebut ditentukan dari nilai minimum tensorinput. - input_max: Jika
range_given == True, ini menentukan nilai input maksimum yang perlu direpresentasikan, jika tidak, nilai tersebut ditentukan dari nilai maksimum tensorinput.
Atribut opsional (lihat Attrs ):
- signed_input: Menunjukkan apakah kuantisasi bertanda atau tidak bertanda. (sebenarnya parameter ini seharusnya disebut
signed_output) - num_bits: Lebar bit kuantisasi.
- range_given: Menunjukkan apakah rentang diberikan atau harus ditentukan dari tensor
input. - round_mode: Atribut 'round_mode' mengontrol algoritma pembulatan mana yang digunakan saat membulatkan nilai float ke nilai kuantisasi yang setara. Mode pembulatan berikut saat ini didukung:
- HALF_TO_EVEN: ini adalah round_mode default.
- HALF_UP: pembulatan ke arah positif. Dalam mode ini, 7,5 dibulatkan ke atas menjadi 8 dan -7,5 dibulatkan ke atas menjadi -7.
- narrow_range: Jika True, maka nilai absolut dari nilai minimum terkuantisasi sama dengan nilai maksimum terkuantisasi, bukan 1 lebih besar. Misalnya, untuk kuantisasi 8 bit, nilai minimumnya adalah -127, bukan -128.
Mengembalikan:
-
Output: Tensor output.
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 | |
|---|---|
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) | |
Struktur | |
|---|---|
| tensorflow::ops::QuantizeAndDequantizeV2::Attrs | Pengaturan 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::Input
operator::tensorflow::Input() const
operator::tensorflow::Output
operator::tensorflow::Output() const
Fungsi statis publik
Jangkauan Sempit
Attrs NarrowRange( bool x )
NumBits
Attrs NumBits( int64 x )
Rentang yang Diberikan
Attrs RangeGiven( bool x )
Mode Putaran
Attrs RoundMode( StringPiece x )
Masukan Bertanda Tangan
Attrs SignedInput( bool x )