tensorflow::ops::QuantizeV2

#include <array_ops.h>

Kuantisasi tensor 'input' bertipe float menjadi tensor 'output' bertipe 'T'.

Ringkasan

[min_range, max_range] adalah bilangan float skalar yang menentukan rentang untuk data 'input'. Atribut 'mode' mengontrol perhitungan mana yang digunakan untuk mengkonversi nilai float ke nilai kuantisasi yang setara. Atribut 'round_mode' mengontrol algoritma pembulatan mana yang digunakan saat membulatkan nilai float ke nilai kuantisasi yang setara.

Dalam mode 'MIN_COMBINED', setiap nilai tensor akan mengalami hal berikut:

out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
if T == qint8: out[i] -= (range(T) + 1) / 2.0

di sini range(T) = numeric_limits ::max() - numeric_limits ::min()

Contoh Mode MIN_COMBINED

Misalkan input bertipe float dan memiliki rentang nilai [0.0, 6.0] dan tipe output adalah quint8 ([0, 255]). Nilai min_range dan max_range harus ditentukan sebagai 0.0 dan 6.0. Kuantisasi dari float ke quint8 akan mengalikan setiap nilai input dengan 255/6 dan mengubahnya menjadi quint8.

Jika tipe outputnya adalah qint8 ([-128, 127]), operasi ini juga akan mengurangi setiap nilai dengan 128 sebelum melakukan konversi tipe, sehingga rentang nilai sesuai dengan rentang qint8.

Jika mode yang dipilih adalah 'MIN_FIRST', maka pendekatan berikut digunakan:

num_discrete_values = 1 << (# of bits in T)
range_adjust = num_discrete_values / (num_discrete_values - 1)
range = (range_max - range_min) * range_adjust
range_scale = num_discrete_values / range
quantized = round(input * range_scale) - round(range_min * range_scale) +
  numeric_limits::min()
quantized = max(quantized, numeric_limits::min())
quantized = min(quantized, numeric_limits::max())

Perbedaan terbesar antara ini dan MIN_COMBINED adalah bahwa rentang minimum dibulatkan terlebih dahulu, sebelum dikurangi dari nilai yang dibulatkan. Dengan MIN_COMBINED, bias kecil diperkenalkan di mana iterasi berulang dari kuantisasi dan dekuantisasi akan memperkenalkan kesalahan yang semakin besar.

Contoh mode SKALA

Mode SCALED sesuai dengan pendekatan kuantisasi yang digunakan dalam QuantizeAndDequantize{V2|V3} .

Jika modenya adalah SCALED , kita tidak menggunakan rentang penuh dari tipe output, melainkan memilih untuk menghilangkan nilai terendah yang mungkin untuk simetri (misalnya, rentang output adalah -127 hingga 127, bukan -128 hingga 127 untuk kuantisasi 8 bit bertanda), sehingga 0,0 dipetakan ke 0.

Pertama-tama kita mencari rentang nilai dalam tensor kita. Rentang yang kita gunakan selalu berpusat pada 0, jadi kita mencari m sedemikian sehingga

  m = max(abs(input_min), abs(input_max))

Rentang tensor input kita adalah [-m, m] .

Selanjutnya, kita memilih bucket kuantisasi titik tetap kita, [min_fixed, max_fixed] . Jika T bertanda, maka ini adalah

  num_bits = sizeof(T) * 8
  [min_fixed, max_fixed] =
      [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]

Sebaliknya, jika T tidak bertanda, rentang titik tetapnya adalah

  [min_fixed, max_fixed] = [0, (1 << num_bits) - 1]

Dari sini kita menghitung faktor skala kita, s:

  s = (max_fixed - min_fixed) / (2 * m)

Sekarang kita dapat mengkuantisasi elemen-elemen tensor kita:

result = round(input * s)

Salah satu hal yang perlu diperhatikan adalah operator mungkin memilih untuk sedikit menyesuaikan nilai minimum dan maksimum yang diminta selama proses kuantisasi, jadi Anda harus selalu menggunakan port output sebagai rentang untuk perhitungan lebih lanjut. Misalnya, jika nilai minimum dan maksimum yang diminta hampir sama, keduanya akan dipisahkan oleh nilai epsilon kecil untuk mencegah pembuatan buffer terkuantisasi yang tidak valid. Jika tidak, Anda dapat berakhir dengan buffer di mana semua nilai terkuantisasi dipetakan ke nilai float yang sama, yang menyebabkan masalah untuk operasi yang harus melakukan perhitungan lebih lanjut padanya.

Argumen:

  • Cakupan: Objek Cakupan
  • min_range: Nilai skalar minimum yang mungkin dihasilkan untuk input.
  • max_range: Nilai skalar maksimum yang mungkin dihasilkan untuk input.

Mengembalikan:

  • Output : Data terkuantisasi yang dihasilkan dari input float.
  • Output output_min: Nilai skalar minimum aktual yang digunakan untuk output.
  • Output output_max: Nilai skalar maksimum aktual yang digunakan untuk output.

Konstruktor dan Destruktor

QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T)
QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T, const QuantizeV2::Attrs & attrs)

Atribut publik

operation
output
output_max
output_min

Fungsi statis publik

Mode (StringPiece x)
RoundMode (StringPiece x)

Struktur

tensorflow::ops::QuantizeV2::Attrs

Pengaturan atribut opsional untuk QuantizeV2 .

Atribut publik

operasi

Operation operation

keluaran

::tensorflow::Output output

output_maksimum

::tensorflow::Output output_max

output_min

::tensorflow::Output output_min

Fungsi publik

Kuantisasi V2

 QuantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range,
  DataType T
)

Kuantisasi V2

 QuantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range,
  DataType T,
  const QuantizeV2::Attrs & attrs
)

Fungsi statis publik

Mode

Attrs Mode(
  StringPiece x
)

Mode Putaran

Attrs RoundMode(
  StringPiece x
)