aliran tensor:: operasi:: QuantizeAndDequantizeV2

#include <array_ops.h>

Mengkuantisasi lalu mendekuantisasi tensor.

Ringkasan

Operasi ini mensimulasikan kehilangan presisi dari forward pass yang terkuantisasi:

  1. Mengkuantisasi tensor ke angka titik tetap, yang harus sesuai dengan metode kuantisasi target saat digunakan dalam inferensi.
  2. 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 input 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 scale_factor dan memperbarui rentang input, hal berikut akan diterapkan pada setiap nilai di tensor 'input'.

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 tensor input .
  • input_max: Jika range_given == True , ini menentukan nilai masukan maksimum yang perlu direpresentasikan, jika tidak maka ditentukan dari nilai maksimal tensor input .

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 pemutusan ikatan pembulatan 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:

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
)