ML Topluluk Günü 9 Kasım! TensorFlow, JAX güncellemeler için bize katılın ve daha fazla bilgi edinin

tensorflow :: ops :: QuantizeV2

#include <array_ops.h>

Float tipinin 'giriş' tensörünü 'T' tipi 'çıkış' tensörüne nicelendirin.

Özet

[min_aralık, maks_aralık], 'giriş' verileri için aralığı belirten skaler kayan değerlerdir. 'Mode' özelliği, float değerlerini nicelleştirilmiş eşdeğerlerine dönüştürmek için tam olarak hangi hesaplamaların kullanıldığını kontrol eder. 'Round_mode' özniteliği, float değerleri nicelleştirilmiş eşdeğerlerine yuvarlanırken hangi yuvarlama bağ-kırma algoritmasının kullanılacağını denetler.

'MIN_COMBINED' modunda, tensörün her bir değeri aşağıdakilerden geçecektir:

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

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

MIN_COMBINED Modu Örneği

Girişin float türü olduğunu ve [0.0, 6.0] olası aralığına sahip olduğunu ve çıktı türünün quint8 ([0, 255]) olduğunu varsayın. Min_range ve max_range değerleri 0.0 ve 6.0 olarak belirtilmelidir. Float'tan quint8'e niceleme, girdinin her bir değerini 255/6 ile çarpar ve quint8'e çevirir.

Çıktı türü qint8 ([-128, 127]) ise, işlem, dökümden önce her bir değeri ek olarak 128 çıkaracaktır, böylece değerler aralığı qint8 aralığıyla aynı hizaya gelir.

Mod 'MIN_FIRST' ise, bu 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())

Bununla MIN_COMBINED arasındaki en büyük fark, minimum aralığın yuvarlanan değerden çıkarılmadan önce yuvarlanmasıdır. MIN_COMBINED ile, tekrarlanan niceleme ve kod çözme yinelemelerinin daha büyük ve daha büyük bir hataya yol açacağı küçük bir önyargı ortaya çıkar.

SCALED modu Örnek

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

Mod SCALED ise, çıkış türünün tüm aralığını kullanmayız, simetri için mümkün olan en düşük değeri seçmeyi seçeriz (örneğin, işaretli 8 bit nicemleme için çıkış aralığı -127 ila 127, -128 ila 127 değil), böylece 0.0, 0 ile eşleşir.

Önce tensörümüzde değerlerin aralığını buluruz. Kullandığımız aralık her zaman 0 merkezlidir, bu nedenle m'yi öyle buluruz

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

Giriş tensör aralığımız bu durumda [-m, m] .

Sonra, sabit nokta niceleme kovalarımızı [min_fixed, max_fixed] . T imzalanmışsa, bu

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

Aksi takdirde, T işaretsiz ise, sabit nokta aralığı

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

Bundan ölçekleme faktörümüzü hesaplıyoruz, s:

  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 biraz ayarlamayı seçebilmesidir, bu nedenle daha sonraki hesaplamalar için aralık olarak her zaman çıkış portlarını kullanmanız gerekir. Örneğin, istenen minimum ve maksimum değerler eşite yakınsa, hatalı biçimlendirilmiş nicelleştirilmiş tamponların oluşturulmasını önlemek için küçük bir epsilon değeriyle ayrılacaktır. Aksi takdirde, tüm nicelenmiş değerlerin aynı kayan değerle eşleştiği tamponlarla sonuçlanabilir, bu da üzerlerinde daha fazla hesaplama yapmak zorunda olan işlemler için sorunlara neden olur.

Argümanlar:

  • kapsam: Bir Scope nesnesi
  • min_range: Giriş için muhtemelen üretilmiş minimum skaler değer.
  • maks_aralık: Giriş için muhtemelen üretilen maksimum skaler değer.

İadeler:

  • Output çıktısı: Float girdisinden üretilen nicelleştirilmiş veriler.
  • Output output_min: Output için kullanılan gerçek minimum skaler değer.
  • Output output_max: Output için kullanılan gerçek maksimum skaler 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

Genel statik işlevler

Mode (StringPiece x)
RoundMode (StringPiece x)

Yapılar

tensorflow :: ops :: QuantizeV2 :: Attrs

QuantizeV2 için isteğe bağlı öznitelik belirleyiciler.

Genel özellikler

operasyon

Operation operation

çıktı

::tensorflow::Output output

output_max

::tensorflow::Output output_max

output_min

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

Genel statik işlevler

Mod

Attrs Mode(
  StringPiece x
)

RoundMode

Attrs RoundMode(
  StringPiece x
)