نشكرك على متابعة Google I / O. عرض جميع الجلسات عند الطلب مشاهدة عند الطلب

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

#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 ، فإننا لا نستخدم النطاق الكامل لنوع المخرجات ، ونختار استبعاد أدنى قيمة ممكنة للتماثل (على سبيل المثال ، نطاق الإخراج هو -127 إلى 127 ، وليس -128 إلى 127 لتكمية 8 بتات موقعة) ، بحيث يتم تعيين 0.0 إلى 0.

نوجد نطاق القيم في الموتر أولًا. النطاق الذي نستخدمه دائمًا يتم توسيطه على 0 ، لذلك نجد m على هذا النحو

  m = max(abs(input_min), abs(input_max))

نطاق موتر الإدخال لدينا هو [-m, m] .

بعد ذلك ، نختار دلاء تكميم النقاط الثابتة ، [min_fixed, max_fixed] . إذا تم توقيع T ، فهذا هو

  num_bits = sizeof(T) * 8
  [min_fixed, max_fixed] =
      [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]

خلاف ذلك ، إذا كانت T غير موقعة ، فإن نطاق النقطة الثابتة هو

  [min_fixed, max_fixed] = [0, (1 << num_bits) - 1]

من هذا نحسب عامل القياس لدينا ، s:

  s = (max_fixed - min_fixed) / (2 * m)

الآن يمكننا تحديد عناصر الموتر الخاص بنا:

result = round(input * s)

شيء واحد يجب الانتباه إليه هو أن المشغل قد يختار تعديل القيم الدنيا والقصوى المطلوبة بشكل طفيف أثناء عملية التكميم ، لذلك يجب عليك دائمًا استخدام منافذ الإخراج كنطاق لمزيد من العمليات الحسابية. على سبيل المثال ، إذا كانت القيم الدنيا والقصوى المطلوبة قريبة من المساواة ، فسيتم فصلها بقيمة إبسيلون صغيرة لمنع إنشاء مخازن مؤقتة كمية سيئة التكوين. خلاف ذلك ، يمكن أن ينتهي بك الأمر بمخازن مؤقتة حيث يتم تعيين جميع القيم الكمية إلى نفس قيمة الطفو ، مما يسبب مشاكل للعمليات التي يتعين عليها إجراء المزيد من الحسابات عليها.

الحجج:

  • النطاق: كائن النطاق
  • min_range: القيمة العددية الدنيا التي يمكن إنتاجها للمدخلات.
  • max_range: القيمة العددية القصوى التي يمكن إنتاجها للإدخال.

عائدات:

  • Output المخرجات: البيانات الكمية الناتجة من إدخال التعويم.
  • Output output_min: الحد الأدنى الفعلي للقيمة العددية المستخدمة للإخراج.
  • Output output_max: القيمة العددية القصوى الفعلية المستخدمة للإخراج.

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

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

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

Mode (StringPiece x)
RoundMode (StringPiece x)

الهياكل

tensorflow :: العمليات :: QuantizeV2 :: Attrs

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

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

عملية

Operation operation

انتاج

::tensorflow::Output output

الإخراج_max

::tensorflow::Output output_max

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

::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 Mode(
  StringPiece x
)

RoundMode

Attrs RoundMode(
  StringPiece x
)