تينسورفلو :: العمليات :: كَمِّي

#include <array_ops.h>

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

ملخص

[min_range، max_range] عوامات رقمية تحدد نطاق بيانات "الإدخال". تتحكم سمة "الوضع" بالضبط في الحسابات المستخدمة لتحويل القيم العائمة إلى مكافئاتها الكمية. تتحكم السمة "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. حساب الكم من float إلى 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 الوضع ، يتم إجراء SCALED بضرب كل قيمة إدخال بواسطة عامل تحجيم. يتم تحديد min_range من min_range والحد max_range إلى أقصى حد ممكن بحيث يمكن min_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);

سنستخدم بعد ذلك scale_factor لضبط min_range و max_range على النحو التالي:

      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 ، ونضبط scaling_factor = 12.8 في هذه الحالة ، min_range سيبقى -10 ولكن سيتم تعديل max_range إلى 127 / 12.8 = 9.921875

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

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

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

لتعديل min_range و max_range يتم إرجاع كما المخرجات 2 و 3 من هذه العملية. يجب استخدام هذه المخرجات كنطاق لأي حسابات أخرى.

السمة الضيقة (bool)

إذا كان هذا صحيحًا ، فإننا لا نستخدم الحد الأدنى من القيمة الكمية. على سبيل المثال ، بالنسبة لـ 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 output_min: الحد الأدنى لنطاق التكميم النهائي ، يستخدم لقص قيم المدخلات قبل قياسها وتقريبها إلى قيم كمية. إذا تم تحديد سمة axis ، فسيكون هذا موترًا أحادي الأبعاد يتطابق حجمه مع بُعد axis لموترات الإدخال والإخراج.
  • Output output_max: الحد الأقصى لمدى التكميم النهائي ، يستخدم لقص قيم المدخلات قبل قياسها وتقريبها إلى قيم كمية. إذا تم تحديد سمة 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 :: العمليات :: QuantizeV2 :: Attrs

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

السمات العامة

عملية

Operation operation

انتاج

::tensorflow::Output output

الإخراج_max

0020277 ب 40

الإخراج_ دقيقة

::tensorflow::Output output_min

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

كَمِّي

 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
)

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

محور

Attrs Axis(
  int64 x
)

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

Attrs EnsureMinimumRange(
  float x
)

الوضع

Attrs Mode(
  StringPiece x
)

نطاق ضيق

Attrs NarrowRange(
  bool x
)

RoundMode

Attrs RoundMode(
  StringPiece x
)