tensor akışı:: işlem:: QuantizeV2

#include <array_ops.h>

Float tipindeki 'giriş' tensörünü 'T' tipindeki 'çıkış' tensörüne niceliklendirin.

Özet

[min_aralık, maksimum_aralık], 'giriş' verilerinin aralığını belirten skaler değişkenlerdir. 'Mode' özelliği, kayan değer değerlerini nicelenmiş eşdeğerlerine dönüştürmek için tam olarak hangi hesaplamaların kullanıldığını kontrol eder. 'Round_mode' özelliği, kayan değer değerlerinin nicelenmiş eşdeğerlerine yuvarlanmasında hangi yuvarlama eşitlik bozma algoritmasının kullanılacağını kontrol eder.

'MIN_COMBINED' modunda tensörün her değeri aşağıdaki işlemlerden geçecektir:

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

MIN_COMBINED Mod Örneği

Girişin float tipinde olduğunu ve olası bir [0.0, 6.0] aralığına sahip olduğunu ve çıkış tipinin quint8 ([0, 255]) olduğunu varsayalım. Min_range ve max_range değerleri 0,0 ve 6,0 olarak belirtilmelidir. Float'tan quint8'e niceleme yapmak, girişin her değerini 255/6 ile çarpacak ve quint8'e dönüştürecektir.

Çıkış türü qint8 ([-128, 127]) ise işlem, değer aralığının qint8 aralığıyla aynı hizada olması için dönüştürmeden önce her değeri ek olarak 128 oranında çıkaracaktır.

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, yuvarlanmış değerden çıkarılmadan önce minimum aralığın önce yuvarlanmasıdır. MIN_COMBINED ile, kuantizasyon ve dekuantizasyon işlemlerinin tekrarlanan yinelemelerinin gittikçe daha büyük bir hataya yol açacağı küçük bir sapma ortaya çıkar.

ÖLÇEKLİ mod Örnek

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

Mod SCALED ise, niceleme her giriş değerinin bir ölçeklendirme_faktörü ile çarpılmasıyla gerçekleştirilir. Ölçekleme_faktörü, min_range ve max_range arasından, min_range ile max_range arasındaki aralığın T tipi değerler içinde temsil edilebileceği şekilde mümkün olduğu kadar büyük olacak şekilde belirlenir.

  

  const int min_T = std::numeric_limits::min();
  const int max_T = std::numeric_limits::max();
  const float max_float = std::numeric_limits::max();

  const float scale_factor_from_min_side =
      (min_T * min_range > 0) ? min_T / min_range : max_float;
  const float scale_factor_from_max_side =
      (max_T * max_range > 0) ? max_T / max_range : max_float;

  const float scale_factor = std::min(scale_factor_from_min_side,
                                      scale_factor_from_max_side);

Daha sonra min_range ve max_range'ı aşağıdaki gibi ayarlamak için Scale_factor'u kullanırız:

      min_range = min_T / scale_factor;
      max_range = max_T / scale_factor;

örneğin T = qint8 ve başlangıçta min_aralık = -10 ve maksimum_aralık = 9 ise, -128/-10,0 = 12,8 ile 127/9,0 = 14,11'i karşılaştırırız ve ölçeklendirme_faktörü = 12,8'i ayarlarız. Bu durumda min_aralık -10 olarak kalır, ancak max_range 127/12,8 = 9,921875 olarak ayarlanacaktır

Dolayısıyla (-10, 9,921875) ila (-128, 127) aralığındaki giriş değerlerini nicelendireceğiz.

Giriş tensörü artık değerlerin min_range ila max_range aralığına kırpılması ve ardından aşağıdaki şekilde ölçek_faktörü ile çarpılmasıyla nicelendirilebilir:

result = round(min(max_range, max(min_range, input)) * scale_factor)

Ayarlanan min_range ve max_range bu işlemin 2 ve 3 numaralı çıkışları olarak döndürülür. Bu çıktılar daha sonraki hesaplamalar için aralık olarak kullanılmalıdır.

dar_aralık (bool) özelliği

Eğer doğruysa, minimum nicelenmiş değeri kullanmayız. yani int8 için nicelenmiş çıktı, tam -128..127 aralığı yerine -127..127 aralığıyla sınırlandırılacaktır. Bu, belirli çıkarım arka uçlarıyla uyumluluk için sağlanmıştır. (Yalnızca ÖLÇEKLİ mod için geçerlidir)

eksen (int) niteliği

İsteğe bağlı bir axis özelliği, giriş tensörünün bir boyut indeksini belirleyebilir; böylece nicemleme aralıkları, bu boyut boyunca tensörün her dilimi için ayrı ayrı hesaplanacak ve uygulanacaktır. Bu, kanal başına nicemleme için kullanışlıdır.

Eksen belirtilirse min_range ve max_range

axis =Yok ise tensör başına nicemleme normal şekilde gerçekleştirilir.

Provid_minimum_range (float) özelliği

Minimum niceleme aralığının en az bu değer olmasını sağlar. Bunun eski varsayılan değeri 0,01'dir, ancak yeni kullanımlar için bu değerin 0'a ayarlanması önemle tavsiye edilir.

Argümanlar:

  • kapsam: Bir Kapsam nesnesi
  • min_range: Niceleme aralığının minimum değeri. Bu değer diğer parametrelere bağlı olarak op tarafından ayarlanabilir. Ayarlanan değer output_min yazılır. axis niteliği belirtilirse bu, boyutu giriş ve çıkış tensörlerinin axis boyutuyla eşleşen 1 boyutlu bir tensör olmalıdır.
  • max_range: Niceleme aralığının maksimum değeri. Bu değer diğer parametrelere bağlı olarak op tarafından ayarlanabilir. Ayarlanan değer output_max yazılır. axis niteliği belirtilirse bu, boyutu giriş ve çıkış tensörlerinin axis boyutuyla eşleşen 1 boyutlu bir tensör olmalıdır.

İadeler:

  • Output çıkışı: Float girişinden üretilen nicelenmiş veriler.
  • Output Output_min: Giriş değerlerini ölçeklendirmeden ve nicelenmiş değerlere yuvarlamadan önce kırpmak için kullanılan minimum son niceleme aralığı. axis niteliği belirtilirse bu, boyutu giriş ve çıkış tensörlerinin axis boyutuyla eşleşen 1 boyutlu bir tensör olacaktır.
  • Output Output_max: Giriş değerlerini ölçeklendirmeden ve nicelenmiş değerlere yuvarlamadan önce kırpmak için kullanılan maksimum nihai niceleme aralığı. axis niteliği belirtilirse bu, boyutu giriş ve çıkış tensörlerinin axis boyutuyla eşleşen 1 boyutlu bir tensör olacaktır.

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

Axis (int64 x)
EnsureMinimumRange (float x)
Mode (StringPiece x)
NarrowRange (bool x)
RoundMode (StringPiece x)

Yapılar

tensorflow:: ops:: QuantizeV2:: Öznitelikler

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

Genel özellikler

operasyon

Operation operation

çıktı

::tensorflow::Output output

çıktı_maks

::tensorflow::Output output_max

çıktı_dakika

::tensorflow::Output output_min

Kamu işlevleri

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

Eksen

Attrs Axis(
  int64 x
)

Minimum Aralık Sağlayın

Attrs EnsureMinimumRange(
  float x
)

Mod

Attrs Mode(
  StringPiece x
)

Dar Aralık

Attrs NarrowRange(
  bool x
)

YuvarlakMod

Attrs RoundMode(
  StringPiece x
)