tensorflow::ops::QuantizeAndDequantizeV2

#include <array_ops.h>

Mengkuantisasi lalu mendekuantisasi tensor.

Ringkasan

Operasi ini mensimulasikan hilangnya presisi dari proses forward pass terkuantisasi dengan cara:

  1. Mengkuantisasi tensor ke angka titik tetap, yang harus sesuai dengan metode kuantisasi target saat digunakan dalam inferensi.
  2. 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 tensor input .
  • input_max: Jika range_given == True , ini menentukan nilai input maksimum yang perlu direpresentasikan, jika tidak, nilai tersebut ditentukan dari nilai maksimum tensor input .

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:

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
)