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, niceleme her giriş değerinin bir ölçekleme faktörü ile çarpılmasıyla gerçekleştirilir. Ölçekleme faktörü, min_range ve max_range değerlerinden, min_range ile max_range arasındaki aralığın T tipindeki değerler içinde temsil edilebilir olmasını sağlayacak şekilde mümkün olduğunca 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);

Ardından, min_range ve max_range'i ayarlamak için scale_factor'ı aşağıdaki gibi kullanıyoruz:

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

Örneğin, T = qint8 ise ve başlangıçta min_range = -10 ve max_range = 9 ise, -128/-10.0 = 12.8'i 127/9.0 = 14.11 ile karşılaştırır ve scaling_factor = 12.8 olarak ayarlardık. Bu durumda, min_range -10 olarak kalır, ancak max_range 127 / 12.8 = 9.921875 olarak ayarlanır.

Dolayısıyla, giriş değerlerini (-10, 9.921875) ile (-128, 127) aralığında nicelleştireceğiz.

Giriş tensörü artık min_range ile max_range aralığındaki değerleri kırparak ve ardından scale_factor ile çarparak aşağıdaki gibi nicelleştirilebilir:

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

Ayarlanmış min_range ve max_range , bu işlemin 2. ve 3. çıktıları olarak döndürülür. Bu çıktılar, bundan sonraki tüm hesaplamalar için aralık olarak kullanılmalıdır.

narrow_range (bool) özniteliği

Eğer doğruysa, minimum nicelleştirilmiş değeri kullanmayız. Yani, int8 için nicelleştirilmiş çıktı, tam -128..127 aralığı yerine -127..127 aralığıyla sınırlandırılır. Bu, belirli çıkarım arka uçlarıyla uyumluluk sağlamak içindir. (Yalnızca ÖLÇEKLENDİRİLMİŞ mod için geçerlidir)

eksen (int) özniteliği

İsteğe bağlı bir axis özniteliği, giriş tensörünün bir boyut indeksini belirtebilir; böylece niceleme aralıkları, tensörün o boyut boyunca her dilimi için ayrı ayrı hesaplanır ve uygulanır. Bu, kanal başına niceleme için kullanışlıdır.

Eksen belirtilmişse, min_range ve max_range

Eğer axis =None ise, her tensör için ayrı ayrı niceleme işlemi normal şekilde gerçekleştirilir.

ensure_minimum_range (float) özniteliği

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

Argümanlar:

  • kapsam: Bir Kapsam nesnesi
  • min_range: Nicelleştirme aralığının minimum değeri. Bu değer, diğer parametrelere bağlı olarak işlem tarafından ayarlanabilir. Ayarlanan değer output_min yazılır. Eğer axis özniteliği belirtilmişse, bu, giriş ve çıkış tensörlerinin axis boyutlarıyla eşleşen boyutta 1 boyutlu bir tensör olmalıdır.
  • max_range: Nicelleştirme aralığının maksimum değeri. Bu değer, diğer parametrelere bağlı olarak işlem tarafından ayarlanabilir. Ayarlanan değer output_max yazılır. Eğer axis özniteliği belirtilmişse, bu, giriş ve çıkış tensörlerinin axis boyutlarıyla eşleşen boyutta 1 boyutlu bir tensör olmalıdır.

İadeler:

  • Output : Kayan noktalı girişten üretilen nicelleştirilmiş veri.
  • Output output_min: Giriş değerlerini ölçeklendirmeden ve yuvarlamadan önce kırpmak için kullanılan son niceleme aralığı minimum değeri. Eğer axis özniteliği belirtilmişse, bu, giriş ve çıkış tensörlerinin axis boyutlarıyla eşleşen boyutta 1 boyutlu bir tensör olacaktır.
  • Output output_max: Giriş değerlerini ölçeklendirmeden ve yuvarlamadan önce kırpmak için kullanılan son niceleme aralığı maksimum değeri. Eğer axis özniteliği belirtilmişse, bu, giriş ve çıkış tensörlerinin axis boyutlarıyla eşleşen boyutta 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

Herkese açık statik fonksiyonlar

Axis (int64 x)
EnsureMinimumRange (float x)
Mode (StringPiece x)
NarrowRange (bool 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

Eksen

Attrs Axis(
  int64 x
)

Minimum Aralığı Sağla

Attrs EnsureMinimumRange(
  float x
)

Mod

Attrs Mode(
  StringPiece x
)

Dar Aralık

Attrs NarrowRange(
  bool x
)

Yuvarlak Mod

Attrs RoundMode(
  StringPiece x
)