tensör akışı:: işlem:: QuantizeAndDequantizeV2

#include <array_ops.h>

Bir tensörü kuantize eder ve ardından dekuantize eder.

Özet

Bu operasyon, nicelenmiş ileri geçişten kaynaklanan hassasiyet kaybını simüle eder:

  1. Çıkarımda kullanıldığında hedef niceleme yöntemiyle eşleşmesi gereken tensörün sabit nokta sayılarına nicelenmesi.
  2. Sonraki operasyonlar için kayan nokta sayılarına geri nicemleme, büyük olasılıkla matmul.

Nicelemenin farklı yolları vardır. Bu sürüm yalnızca ölçeklendirmeyi kullanır, dolayısıyla 0,0, 0 ile eşleşir.

Nicelenmiş çıkış tipinde belirtilen 'num_bits'ten, temsil edilebilir minimum ve maksimum nicelenmiş değerleri belirler.

örneğin

  • İmzalı için [-128, 127], num_bits = 8 veya
  • İmzasızlar için [0, 255], num_bits = 8.

range_given == False ise, başlangıçtaki input_min, input_max, giriş tensöründeki minimum ve maksimum değerler olarak otomatik olarak belirlenecektir, aksi takdirde belirtilen input_min, input_max değerleri kullanılır.

Not: input_min, input_max belirtilirse bunların tensördeki gerçek minimum ve maksimum değerlere eşit olması gerekmez. örneğin bazı durumlarda, girdi dağılımının düşük olasılıklı uç noktalarının kırpılacağı şekilde bu değerlerin belirtilmesi faydalı olabilir.

Bu işlem, başlangıçtaki [giriş_min, giriş_maks] aralığını temsil edilebilir nicelenmiş aralık içinde yer alan bir aralığa eşleyecek maksimum ölçek_faktörünü belirler.

input_min ve input_max değerlerinden birinin ölçeğini belirler, ardından temsil edilebilir aralığı en üst düzeye çıkarmak için diğerini günceller.

örneğin

  • çıkış imzalanmışsa, sayı_bitleri = 8, [input_min, input_max] = [-10,0, 5,0]: -128 / -10,0 = 12,8'lik bir ölçek_faktörü kullanır. Bu durumda, input_max'ı 127 / 12,8 = olacak şekilde günceller 9.921875
  • çıkış imzalanmışsa, sayı_bitleri = 8, [input_min, input_max] = [-10,0, 10,0]: 127 / 10,0 = 12,7'lik bir ölçek_faktörü kullanır. Bu durumda, input_min'i 128,0 / 12,7 = -10,07874 olacak şekilde günceller
  • çıkış imzasızsa input_min 0 olmaya zorlanır ve yalnızca belirtilen input_max kullanılır.

Scale_factor'u belirledikten ve giriş aralığını güncelledikten sonra, 'giriş' tensöründeki her değere aşağıdakileri uygular.

çıktı = round(clamp(değer, giriş_min, giriş_maks) * ölçek_faktörü) / ölçek_faktörü.

Yukarıdaki round işlevi, verilen round_mode'a göre değeri yuvarlar.

Argümanlar:

  • kapsam: Bir Kapsam nesnesi
  • giriş: Kuantize edilecek ve ardından dekuantize edilecek tensör .
  • input_min: range_given == True ise bu, temsil edilmesi gereken minimum giriş değerini belirtir, aksi takdirde input tensörünün minimum değerinden belirlenir.
  • input_max: range_given == True ise bu, temsil edilmesi gereken maksimum giriş değerini belirtir, aksi takdirde input tensörünün maksimum değerinden belirlenir.

İsteğe bağlı özellikler (bkz. Attrs ):

  • Signed_input: Nicelemenin imzalı mı yoksa imzasız mı olduğu. (aslında bu signed_output olarak adlandırılması gerekirdi)
  • num_bits: Nicelemenin bit genişliği.
  • range_given: Aralığın verilip verilmediği veya input tensöründen mi belirleneceği.
  • round_mode: 'Round_mode' özelliği, float değerleri nicelenmiş eşdeğerlerine yuvarlarken hangi yuvarlama eşitlik bozma algoritmasının kullanıldığını kontrol eder. Şu anda aşağıdaki yuvarlama modları desteklenmektedir:
  • HALF_TO_EVEN: bu varsayılan round_mode'dur.
  • HALF_UP: pozitife doğru yuvarlar. Bu modda 7,5, 8'e, -7,5 ise -7'ye yuvarlanır.
  • dar_aralık: Doğruysa, nicelenmiş minimum değerin mutlak değeri, nicelenmiş maksimum değerle 1 daha büyük olmak yerine aynıdır. yani 8 bit niceleme için minimum değer -128 yerine -127'dir.
  • eksen: Belirtilirse, bu eksen bir kanal veya dilim ekseni olarak ele alınır ve bu eksen boyunca her kanal veya dilim için ayrı bir niceleme aralığı kullanılır.

İade:

  • Output : Çıkış tensörü.

Yapıcılar ve Yıkıcılar

QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max)
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs)

Genel özellikler

operation
output

Kamu işlevleri

node () const
::tensorflow::Node *
operator::tensorflow::Input () const
operator::tensorflow::Output () const

Genel statik işlevler

Axis (int64 x)
NarrowRange (bool x)
NumBits (int64 x)
RangeGiven (bool x)
RoundMode (StringPiece x)
SignedInput (bool x)

Yapılar

tensorflow:: ops:: QuantizeAndDequantizeV2:: Öznitelikler

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

Genel özellikler

operasyon

Operation operation

çıktı

::tensorflow::Output output

Kamu işlevleri

QuantizeAndDequantizeV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max
)

QuantizeAndDequantizeV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max,
  const QuantizeAndDequantizeV2::Attrs & attrs
)

düğüm

::tensorflow::Node * node() const 

operatör::tensorflow::Giriş

 operator::tensorflow::Input() const 

operatör::tensorflow::Çıktı

 operator::tensorflow::Output() const 

Genel statik işlevler

Eksen

Attrs Axis(
  int64 x
)

Dar Aralık

Attrs NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

Verilen Aralık

Attrs RangeGiven(
  bool x
)

YuvarlakMod

Attrs RoundMode(
  StringPiece x
)

İmzalıGiriş

Attrs SignedInput(
  bool x
)