tensorflow:: ops:: 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
مثال على وضع 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.
نبدأ بإيجاد نطاق القيم في الموتر. النطاق الذي نستخدمه يكون دائمًا متمركزًا حول الصفر، لذلك نجد قيمة 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: البيانات الكمية الناتجة من المدخلات ذات العدد العشري. -
Outputoutput_min: القيمة العددية الدنيا الفعلية المستخدمة للإخراج. -
Outputoutput_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:: ops:: QuantizeV2:: Attrs | أدوات تعيين السمات الاختيارية لـ QuantizeV2 . |
السمات العامة
عملية
Operation operation
المخرجات
::tensorflow::Output output
output_max
::tensorflow::Output output_max
output_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 )
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2026-11-05 (حسب التوقيت العالمي المتفَّق عليه)