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
ilamax_range
aralığındaki değerlermax_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
vemax_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örlerininaxis
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örlerininaxis
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örlerininaxis
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örlerininaxis
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 )