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