tensör 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'ı ayarlamak için Scale_factor'u aşağıdaki gibi 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 gibi ö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 belirtebilir, böylece nicemleme aralıkları, o 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.

İade:

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