تدفق التوتر:: العمليات:: 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 ، فإننا لا نستخدم النطاق الكامل لنوع الإخراج، ونختار حذف أقل قيمة ممكنة للتناظر (على سبيل المثال، نطاق الإخراج هو -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 : القيمة العددية القصوى الفعلية المستخدمة للإخراج.

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

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

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

Attrs RoundMode(
  StringPiece x
)