تدفق التوتر:: العمليات:: 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 )
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2024-11-24 (حسب التوقيت العالمي المتفَّق عليه)