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