Google I/O'yu ayarladığınız için teşekkür ederiz. İsteğe bağlı olarak tüm oturumları görüntüleyin İsteğe bağlı olarak izleyin

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 olası bir [0.0, 6.0] 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 neden olacağı küçük bir önyargı ortaya çıkar.

SCALED modu Örnek

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

Modu ise SCALED , niceleme bir scaling_factor ile her bir giriş değeri ile çarpılarak gerçekleştirilir. Ölçeklendirme faktörü, min_range ve max_range olabildiğince büyük olacak şekilde belirlenir, öyle ki min_range ile max_range arasındaki aralık T tipi değerler içinde gösterilebilir.

  

  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, aşağıdaki gibi min_aralık ve maks_aralığı ayarlamak için scale_factor'ı kullanacağı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 maks_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 olarak ayarlarız Bu durumda min_aralık -10 olarak kalır, ancak maks_aralık 127 / 12,8 = 9,921875 olarak ayarlanır

Böylece (-10, 9.921875) ila (-128, 127) aralığındaki girdi değerlerini nicelendireceğiz.

Girdi tensörü artık min_range ila max_range aralığındaki değerler max_range ve ardından aşağıdaki gibi ölçek_faktörü ile çarpılarak nicelendirilebilir:

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

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

dar_aralık (bool) özniteliği

Doğruysa, minimum nicelleştirilmiş değeri kullanmayız. yani, nicelleştirilmiş çıktı int8 için, tam -128..127 aralığı yerine -127..127 aralığı ile sınırlı olacaktır. Bu, belirli çıkarım arka uçlarıyla uyumluluk için sağlanmıştır. (Yalnızca SCALED modu için geçerlidir)

eksen (int) özniteliği

İsteğe bağlı bir axis özelliği, girdi tensörünün bir boyut indeksini belirtebilir, öyle ki niceleme aralıkları bu boyut boyunca tensörün her bir dilimi için ayrı ayrı hesaplanacak ve uygulanacaktır. Bu, kanal başına niceleme için kullanışlıdır.

Eksen belirtilmişse, min_aralık ve maks_aralık

axis = Yok ise, tensör başına niceleme normal olarak gerçekleştirilir.

sure_minimum_range (float) özniteliği

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

Argümanlar:

  • kapsam: Bir Scope 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 . axis özelliği belirtilmişse, boyutu giriş ve çıkış tensörlerinin axis boyutuyla eşleşen 1-D tensör olmalıdır.
  • maks_aralığı: 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 . axis özelliği belirtilmişse, boyutu giriş ve çıkış tensörlerinin axis boyutuyla eşleşen 1-D tensör olmalıdır.

İadeler:

  • Output çıktısı: Float girdisinden üretilen nicelleştirilmiş veriler.
  • Output output_min: Ölçeklemeden önce girdi değerlerini kırpmak ve nicelenmiş değerlere yuvarlamak için kullanılan minimum niceleme aralığı. axis niteliği belirtilmişse, boyutu giriş ve çıkış tensörlerinin axis boyutuyla eşleşen 1-D tensör olacaktır.
  • Output output_max: Ölçeklemeden önce girdi değerlerini kırpmak ve nicelenmiş değerlere yuvarlamak için kullanılan nihai niceleme aralığı maksimumdur. axis niteliği belirtilirse, boyutu giriş ve çıkış tensörlerinin axis boyutuyla eşleşen 1-D 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 :: 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

Eksen

Attrs Axis(
  int64 x
)

EnsureMinimumRange

Attrs EnsureMinimumRange(
  float x
)

Mod

Attrs Mode(
  StringPiece x
)

NarrowRange

Attrs NarrowRange(
  bool x
)

RoundMode

Attrs RoundMode(
  StringPiece x
)