Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

tensorflow :: ops :: KuantisasiV2

#include <array_ops.h>

Hitung tensor 'input' berjenis float ke tensor 'keluaran' berjenis 'T'.

Ringkasan

[min_range, max_range] adalah float skalar yang menentukan kisaran untuk data 'masukan'. Atribut 'mode' mengontrol dengan tepat penghitungan mana yang digunakan untuk mengonversi nilai float ke padanan terkuantisasi. Atribut 'round_mode' mengontrol pembulatan algoritma tie-breaking yang digunakan saat membulatkan nilai float ke padanan terkuantisasi.

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() range(T) = numeric_limits ::max() - numeric_limits ::min() range(T) = numeric_limits ::max() - numeric_limits ::min()

Contoh Mode MIN_COMBINED

Asumsikan input adalah tipe float dan memiliki kemungkinan kisaran [0,0, 6.0] dan tipe output quint8 ([0, 255]). Nilai min_range dan max_range harus ditentukan sebagai 0.0 dan 6.0. Mengukur dari float ke quint8 akan mengalikan setiap nilai input dengan 255/6 dan melemparkan ke quint8.

Jika jenis keluarannya adalah qint8 ([-128, 127]), operasi tersebut juga akan mengurangi setiap nilai dengan 128 sebelum casting, sehingga kisaran nilai sejajar dengan kisaran qint8.

Jika modenya adalah 'MIN_FIRST', maka pendekatan ini 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 kisaran minimum dibulatkan terlebih dahulu, sebelum dikurangi dari nilai yang dibulatkan. Dengan MIN_COMBINED, bias kecil diperkenalkan di mana iterasi berulang dari kuantisasi dan dequantizing akan memperkenalkan kesalahan yang lebih besar dan lebih besar.

Contoh mode SCALED

Mode SCALED cocok dengan pendekatan kuantisasi yang digunakan di QuantizeAndDequantize{V2|V3} .

Jika mode SCALED , kami tidak menggunakan rentang penuh tipe output, memilih untuk memilih nilai serendah mungkin untuk simetri (misalnya, rentang output adalah -127 hingga 127, bukan -128 hingga 127 untuk kuantisasi 8 bit yang ditandatangani), sehingga 0,0 dipetakan ke 0.

Pertama-tama kami menemukan rentang nilai di tensor kami. Rentang yang kami gunakan selalu berpusat pada 0, jadi kami menemukan m sedemikian rupa

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

Rentang tensor masukan kita kemudian [-m, m] .

Selanjutnya, kami memilih bucket kuantisasi titik tetap kami, [min_fixed, max_fixed] . Jika T ditandatangani, ini

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

Sebaliknya, jika T tidak bertanda tangan, kisaran titik tetapnya adalah

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

Dari sini kami menghitung faktor penskalaan kami, s:

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

Sekarang kita dapat mengukur elemen tensor kita:

result = round(input * s)

Satu hal yang harus diperhatikan adalah operator dapat memilih untuk menyesuaikan nilai minimum dan maksimum yang diminta sedikit selama proses kuantisasi, jadi Anda harus selalu menggunakan port keluaran sebagai rentang untuk penghitungan lebih lanjut. Misalnya, jika nilai minimum dan maksimum yang diminta mendekati sama, nilai tersebut akan dipisahkan oleh nilai epsilon kecil untuk mencegah buffer terkuantisasi yang bentuknya buruk dibuat. Jika tidak, Anda bisa berakhir dengan buffer di mana semua nilai terkuantisasi dipetakan ke nilai float yang sama, yang menyebabkan masalah untuk operasi yang harus melakukan penghitungan lebih lanjut padanya.

Argumen:

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

Pengembalian:

  • Output 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.

Pembuat dan Penghancur

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)

Structs

tensorflow :: ops :: QuantizeV2 :: Attrs

Penyetel atribut opsional untuk QuantizeV2 .

Atribut publik

operasi

Operation operation
.dll

keluaran

::tensorflow::Output output

output_max

::tensorflow::Output output_max

output_min

::tensorflow::Output output_min

Fungsi publik

KuantisasiV2

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

KuantisasiV2

 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
)

RoundMode

Attrs RoundMode(
  StringPiece x
)