Quantize

الطبقة النهائية العامة Quantize

قم بقياس موتر "الإدخال" من النوع float إلى موتر "الإخراج" من النوع "T".

[min_range, max_range] عبارة عن عوامات عددية تحدد نطاق بيانات "الإدخال". تتحكم السمة "mode" بالضبط في الحسابات المستخدمة لتحويل القيم العائمة إلى معادلاتها الكمية. تتحكم السمة 'round_mode' في خوارزمية تقريب التعادل المستخدمة عند تقريب القيم العائمة إلى مكافئاتها الكمية.

في الوضع "MIN_COMBINED"، ستخضع كل قيمة للموتر لما يلي:

out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
 if T == qint8: out[i] -= (range(T) + 1) / 2.0
 
هنا النطاق (T) = numeric_limits ::max() - numeric_limits ::دقيقة()`

مثال على وضع MIN_COMBINED

افترض أن الإدخال من النوع float وله نطاق محتمل يبلغ [0.0، 6.0] ونوع الإخراج هو quint8 ([0، 255]). يجب تحديد قيم min_range وmax_range على أنها 0.0 و6.0. سيؤدي القياس الكمي من التعويم إلى quint8 إلى مضاعفة كل قيمة من المدخلات بمقدار 255/6 وإحالتها إلى quint8.

إذا كان نوع الإخراج هو qint8 ([-128، 127])، فستعمل العملية أيضًا على طرح كل قيمة بمقدار 128 قبل الإرسال، بحيث يتماشى نطاق القيم مع نطاق qint8.

إذا كان الوضع هو "MIN_FIRST"، فسيتم استخدام هذا الأسلوب:

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<T>::min()
 quantized = max(quantized, numeric_limits<T>::min())
 quantized = min(quantized, numeric_limits<T>::max())
 
أكبر فرق بين هذا وMIN_COMBINED هو أن الحد الأدنى للنطاق يتم تقريبه أولاً، قبل طرحه من القيمة المقربة. مع MIN_COMBINED، يتم تقديم انحياز صغير حيث تؤدي التكرارات المتكررة للتكميم والتكميم إلى حدوث خطأ أكبر وأكبر.

مثال على وضع مقياس الحجم

يتطابق وضع `SCALED` مع أسلوب التكميم المستخدم في `QuantizeAndDequantize{V2|V3}`.

إذا كان الوضع `SCALED`، فسيتم إجراء القياس الكمي عن طريق ضرب كل قيمة إدخال في عامل القياس. يتم تحديد عامل القياس من `min_range` و`max_range` ليكون أكبر حجم ممكن بحيث يمكن تمثيل النطاق من `min_range` إلى `max_range` ضمن قيم من النوع T.

const int min_T = std::numeric_limits<T>::min();
   const int max_T = std::numeric_limits<T>::max();
   const float max_float = std::numeric_limits<float>::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);
 
نستخدم بعد ذلك عامل المقياس لضبط النطاق الأدنى والنطاق الأقصى كما يلي:
min_range = min_T / scale_factor;
       max_range = max_T / scale_factor;
 
على سبيل المثال، إذا كان T = qint8، وفي البداية min_range = -10، وmax_range = 9، فسنقارن -128/-10.0 = 12.8 إلى 127/9.0 = 14.11، ونضبط عامل القياس = 12.8 في هذه الحالة، سيبقى min_range -10، ولكن سيتم تعديل max_range إلى 127 / 12.8 = 9.921875

لذلك سنقوم بقياس قيم المدخلات في النطاق (-10، 9.921875) إلى (-128، 127).

يمكن الآن قياس موتر الإدخال عن طريق قص القيم إلى النطاق "min_range" إلى "max_range"، ثم الضرب في عامل القياس كما يلي:

result = round(min(max_range, max(min_range, input)) * scale_factor)
 
يتم إرجاع `min_range` و`max_range` المعدلين كمخرجين 2 و3 لهذه العملية. وينبغي استخدام هذه المخرجات كنطاق لأية حسابات أخرى.

سمة النطاق الضيق (منطقي).

إذا كان هذا صحيحا، فإننا لا نستخدم الحد الأدنى من القيمة الكمية. على سبيل المثال، بالنسبة للإخراج الكمي int8، فإنه سيقتصر على النطاق -127..127 بدلاً من النطاق الكامل -128..127. يتم توفير ذلك للتوافق مع بعض الواجهات الخلفية للاستدلال. (ينطبق فقط على وضع SCALED)

سمة المحور (int).

يمكن لسمة "المحور" الاختيارية تحديد فهرس البعد لموتر الإدخال، بحيث سيتم حساب نطاقات التكميم وتطبيقها بشكل منفصل على كل شريحة من الموتر على طول هذا البعد. وهذا مفيد للتكميم لكل قناة.

إذا تم تحديد المحور، min_range وmax_range

إذا كان `المحور`=لا شيء، فسيتم إجراء التكميم لكل موتر كالمعتاد.

سمة ضمان_الحد الأدنى_للنطاق (العائم).

يضمن أن الحد الأدنى لنطاق التكميم هو هذه القيمة على الأقل. القيمة الافتراضية القديمة لهذا هي 0.01، ولكن يُقترح بشدة تعيينها على 0 للاستخدامات الجديدة.

فئات متداخلة

فصل Quantize.Options سمات اختيارية ل Quantize

الثوابت

خيط OP_NAME اسم هذه العملية كما هو معروف بواسطة محرك TensorFlow الأساسي

الأساليب العامة

Quantize.Options ثابت
المحور (المحور الطويل)
ثابت <T يمتد TType > تكمي <T>
إنشاء ( نطاق النطاق ، المعامل < TFloat32 > الإدخال، المعامل < TFloat32 > minRange، المعامل < TFloat32 > maxRange، الفئة <T> T، الخيارات ... خيارات)
طريقة المصنع لإنشاء فئة تغلف عملية Quantize جديدة.
Quantize.Options ثابت
ضمان الحد الأدنى (تعويم ضمان الحد الأدنى)
Quantize.Options ثابت
الوضع (وضع السلسلة)
Quantize.Options ثابت
النطاق الضيق (النطاق الضيق المنطقي)
الإخراج <T>
الإخراج ()
البيانات الكمية المنتجة من المدخلات العائمة.
الإخراج <TFloat32>
الناتج ماكس ()
الحد الأقصى لنطاق التكميم النهائي، المستخدم لقص القيم المدخلة قبل قياسها وتقريبها إلى قيم مكممة.
الإخراج <TFloat32>
الحد الأدنى للإخراج ()
الحد الأدنى لنطاق التكميم النهائي، المستخدم لقص القيم المدخلة قبل قياسها وتقريبها إلى قيم مكممة.
Quantize.Options ثابت
وضع مستدير (وضع دائري سلسلة)

الطرق الموروثة

الثوابت

السلسلة النهائية الثابتة العامة OP_NAME

اسم هذه العملية كما هو معروف بواسطة محرك TensorFlow الأساسي

القيمة الثابتة: "QuantizeV2"

الأساليب العامة

محور Quantize.Options الثابت العام (المحور الطويل)

إنشاء عام ثابت Quantize <T> (نطاق النطاق ، المعامل < TFloat32 > الإدخال، المعامل < TFloat32 > minRange، المعامل < TFloat32 > maxRange، Class<T> T، خيارات... خيارات)

طريقة المصنع لإنشاء فئة تغلف عملية Quantize جديدة.

حدود
نِطَاق النطاق الحالي
minRange الحد الأدنى لقيمة نطاق التكميم. يمكن تعديل هذه القيمة من خلال العملية اعتمادًا على المعلمات الأخرى. تتم كتابة القيمة المعدلة إلى "output_min". إذا تم تحديد سمة "المحور"، فيجب أن يكون موترًا أحادي الأبعاد يتطابق حجمه مع بُعد "المحور" لموترات الإدخال والإخراج.
maxRange القيمة القصوى لنطاق التكميم. يمكن تعديل هذه القيمة من خلال العملية اعتمادًا على المعلمات الأخرى. تتم كتابة القيمة المعدلة إلى "output_max". إذا تم تحديد سمة "المحور"، فيجب أن يكون موترًا أحادي الأبعاد يتطابق حجمه مع بُعد "المحور" لموترات الإدخال والإخراج.
خيارات يحمل قيم السمات الاختيارية
المرتجعات
  • مثيل جديد من Quantize

Quantize.Options العامة الثابتة ضمانMinimumRange (تعويم ضمانMinimumRange)

وضع Quantize.Options الثابت العام (وضع السلسلة)

Quantize.Options العام الثابت

الإخراج العام <T> الإخراج ()

البيانات الكمية المنتجة من المدخلات العائمة.

الإخراج العام <TFloat32> OutputMax ()

الحد الأقصى لنطاق التكميم النهائي، المستخدم لقص القيم المدخلة قبل قياسها وتقريبها إلى قيم مكممة. إذا تم تحديد سمة "المحور"، فسيكون هذا موترًا أحادي الأبعاد يتطابق حجمه مع بُعد "المحور" لموترات الإدخال والإخراج.

الإخراج العام <TFloat32> OutputMin ()

الحد الأدنى لنطاق التكميم النهائي، المستخدم لقص القيم المدخلة قبل قياسها وتقريبها إلى قيم مكممة. إذا تم تحديد سمة "المحور"، فسيكون هذا موترًا أحادي الأبعاد يتطابق حجمه مع بُعد "المحور" لموترات الإدخال والإخراج.

Quantize.Options الثابت العام ( RoundMode ) (String roundMode)