تدفق التوتر:: العمليات:: QuantizeV2

#include <array_ops.h>

قم بقياس موتر "الإدخال" من النوع 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

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

افترض أن الإدخال من النوع 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::min()
quantized = max(quantized, numeric_limits::min())
quantized = min(quantized, numeric_limits::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::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);

نستخدم بعد ذلك عامل المقياس لضبط النطاق الأدنى والحد الأقصى كما يلي:

      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).

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

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

إذا كان axis = لا شيء، يتم تنفيذ التكميم لكل موتر كالمعتاد.

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

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

الحجج:

  • النطاق: كائن النطاق
  • min_range: الحد الأدنى لقيمة نطاق التكميم. يمكن تعديل هذه القيمة من خلال العملية اعتمادًا على المعلمات الأخرى. تتم كتابة القيمة المعدلة إلى output_min . إذا تم تحديد سمة axis ، فيجب أن يكون موترًا أحادي الأبعاد يتطابق حجمه مع بُعد axis لموترات الإدخال والإخراج.
  • max_range: القيمة القصوى لنطاق التكميم. يمكن تعديل هذه القيمة من خلال العملية اعتمادًا على المعلمات الأخرى. تتم كتابة القيمة المعدلة إلى output_max . إذا تم تحديد سمة axis ، فيجب أن يكون موترًا أحادي الأبعاد يتطابق حجمه مع بُعد axis لموترات الإدخال والإخراج.

العوائد:

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

البنائين والمدمرين

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)

الصفات العامة

operation
output
output_max
output_min

وظائف ثابتة العامة

Axis (int64 x)
EnsureMinimumRange (float x)
Mode (StringPiece x)
NarrowRange (bool x)
RoundMode (StringPiece x)

الهياكل

Tensorflow:: ops:: QuantizeV2:: Attrs

محددات السمات الاختيارية لـ QuantizeV2 .

الصفات العامة

عملية

Operation operation

الإخراج

::tensorflow::Output output

input_max

::tensorflow::Output output_max

input_min

::tensorflow::Output output_min

الوظائف العامة

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
)

وظائف ثابتة العامة

محور

Attrs Axis(
  int64 x
)

ضمان الحد الأدنى

Attrs EnsureMinimumRange(
  float x
)

وضع

Attrs Mode(
  StringPiece x
)

نطاق ضيق

Attrs NarrowRange(
  bool x
)

الوضع الدائري

Attrs RoundMode(
  StringPiece x
)