tensorflow::ops::QuantizeV2

#include <array_ops.h>

'Girdi' tensörünü (float türünde) 'çıktı' tensörüne (T türünde) dönüştürün.

Özet

[min_range, max_range], 'giriş' verileri için aralığı belirten skalar kayan noktalı sayılardır. 'mode' özniteliği, kayan noktalı değerleri nicelleştirilmiş karşılıklarına dönüştürmek için hangi hesaplamaların kullanılacağını tam olarak kontrol eder. 'round_mode' özniteliği, kayan noktalı değerleri nicelleştirilmiş karşılıklarına yuvarlarken hangi yuvarlama algoritmasının kullanılacağını kontrol eder.

'MIN_COMBINED' modunda, tensörün her değeri aşağıdaki işlemlere tabi tutulacaktır:

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

burada range(T) = numeric_limits ::max() - numeric_limits ::min()

MIN_COMBINED Modu Örneği

Girişin float türünde ve [0.0, 6.0] aralığında olabileceğini, çıkışın ise quint8 ([0, 255]) türünde olduğunu varsayalım. min_range ve max_range değerleri sırasıyla 0.0 ve 6.0 olarak belirtilmelidir. float'tan quint8'e dönüştürme işlemi, girişin her değerini 255/6 ile çarpacak ve quint8'e dönüştürecektir.

Çıktı türü qint8 ([-128, 127]) ise, dönüştürmeden önce her değerden 128 çıkarılarak değer aralığı qint8'in aralığıyla uyumlu hale getirilir.

Mod 'MIN_FIRST' ise, şu yaklaşım kullanılır:

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())

Bu yöntem ile MIN_COMBINED arasındaki en büyük fark, minimum aralığın önce yuvarlanması ve ardından yuvarlanmış değerden çıkarılmasıdır. MIN_COMBINED ile, tekrarlanan nicelleştirme ve nicelleştirmeyi kaldırma işlemleri daha büyük ve daha büyük bir hataya yol açacağından küçük bir sapma oluşur.

Ölçeklendirilmiş mod Örneği

SCALED modu QuantizeAndDequantize{V2|V3} içinde kullanılan niceleme yaklaşımıyla eşleşir.

Eğer mod SCALED ise, çıktı türünün tam aralığını kullanmayız ve simetri için mümkün olan en düşük değeri atlarız (örneğin, işaretli 8 bit niceleme için çıktı aralığı -128 ila 127 değil, -127 ila 127'dir), böylece 0.0, 0'a eşlenir.

Öncelikle tensörümüzdeki değer aralığını buluyoruz. Kullandığımız aralık her zaman 0 merkezlidir, bu nedenle m'yi şu şekilde buluyoruz:

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

Giriş tensörümüzün aralığı o halde [-m, m] olur.

Ardından, sabit noktalı niceleme aralıklarımızı [min_fixed, max_fixed] seçiyoruz. Eğer T işaretli ise, bu şöyledir:

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

Aksi takdirde, eğer T işaretsiz ise, sabit nokta aralığı şöyledir:

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

Buradan ölçeklendirme faktörümüzü, s'yi hesaplıyoruz:

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

Şimdi tensörümüzün elemanlarını nicelleştirebiliriz:

result = round(input * s)

Dikkat edilmesi gereken bir nokta, operatörün niceleme işlemi sırasında istenen minimum ve maksimum değerleri hafifçe ayarlamayı seçebilmesidir; bu nedenle, daha sonraki hesaplamalar için her zaman çıkış portlarını aralık olarak kullanmalısınız. Örneğin, istenen minimum ve maksimum değerler birbirine yakınsa, hatalı nicelenmiş tamponların oluşturulmasını önlemek için küçük bir epsilon değeriyle ayrılacaklardır. Aksi takdirde, tüm nicelenmiş değerlerin aynı kayan nokta değerine eşlendiği tamponlar elde edebilirsiniz; bu da üzerinde daha fazla hesaplama yapması gereken işlemler için sorunlara neden olur.

Argümanlar:

  • kapsam: Bir Kapsam nesnesi
  • min_range: Girdi için üretilebilecek en küçük skalar değer.
  • max_range: Giriş için üretilebilecek maksimum skalar değer.

İadeler:

  • Output : Kayan noktalı girişten üretilen nicelleştirilmiş veri.
  • Output : Çıktı için kullanılan gerçek minimum skalar değer.
  • Output : Çıktı için kullanılan gerçek maksimum skalar değer.

Yapıcılar ve Yıkıcılar

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)

Genel özellikler

operation
output
output_max
output_min

Herkese açık statik fonksiyonlar

Mode (StringPiece x)
RoundMode (StringPiece x)

Yapılar

tensorflow::ops::QuantizeV2::Attrs

QuantizeV2 için isteğe bağlı özellik ayarlayıcıları.

Genel özellikler

operasyon

Operation operation

çıktı

::tensorflow::Output output

çıktı_maks

::tensorflow::Output output_max

çıktı_minimum

::tensorflow::Output output_min

Kamusal işlevler

QuantizeV2

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

QuantizeV2

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

Herkese açık statik fonksiyonlar

Mod

Attrs Mode(
  StringPiece x
)

Yuvarlak Mod

Attrs RoundMode(
  StringPiece x
)