تدفق التوتر:: العمليات:: تخلص من الكمية
#include <array_ops.h>
قم بإلغاء موتر "الإدخال" في موتر عائم.
ملخص
[min_range, max_range] عبارة عن عوامات عددية تحدد نطاق بيانات "الإدخال". تتحكم السمة "mode" بالضبط في الحسابات المستخدمة لتحويل القيم العائمة إلى معادلاتها الكمية.
في الوضع "MIN_COMBINED"، ستخضع كل قيمة للموتر لما يلي:
if T == qint8: in[i] += (range(T) + 1)/ 2.0 out[i] = min_range + (in[i]* (max_range - min_range) / range(T))
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
إذا كان الإدخال يأتي من QuantizedRelu6 ، فإن نوع الإخراج هو quint8 (نطاق من 0-255) ولكن النطاق المحتمل لـ QuantizedRelu6 هو 0-6. وبالتالي فإن قيمتي min_range وmax_range هي 0.0 و6.0. سوف يأخذ Dequantize على quint8 كل قيمة، ويلقيها لتطفو، ويضربها في 6/255. لاحظ أنه إذا كان النوع الكمي هو qint8، فإن العملية ستضيف بالإضافة إلى ذلك كل قيمة بمقدار 128 قبل الصب.
إذا كان الوضع هو "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 = range / num_discrete_values const double offset_input = static_cast(input) - lowest_quantized; result = range_min + ((input - numeric_limits ::min()) * range_scale)
مثال على وضع مقياس الحجم
يتطابق وضع 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 = (2 * m) / (max_fixed - min_fixed)
الآن يمكننا استخلاص عناصر الموتر لدينا:
result = input * s
الحجج:
- النطاق: كائن النطاق
- min_range: الحد الأدنى من القيمة العددية التي يمكن إنتاجها للإدخال.
- max_range: الحد الأقصى للقيمة العددية التي يمكن إنتاجها للإدخال.
العوائد:
-
Output
: موتر الإخراج.
البنائين والمدمرين | |
---|---|
Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range) | |
Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, const Dequantize::Attrs & attrs) |
الوظائف العامة | |
---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const |
الهياكل | |
---|---|
Tensorflow:: ops:: Dequantize:: Attrs | محددات السمة الاختيارية لـ Dequantize . |
الصفات العامة
عملية
Operation operation
الإخراج
::tensorflow::Output output
الوظائف العامة
تخلص من الكمية
Dequantize( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range )
تخلص من الكمية
Dequantize( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, const Dequantize::Attrs & attrs )
العقدة
::tensorflow::Node * node() const
المشغل::tensorflow::الإدخال
operator::tensorflow::Input() const
المشغل::tensorflow::الإخراج
operator::tensorflow::Output() const
وظائف ثابتة العامة
وضع
Attrs Mode( StringPiece x )