tensorflow :: ops :: QuantizeV2
#include <array_ops.h>
اندازه گیری سنسور "ورودی" نوع شناور به "خروجی" نوع "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()
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 به عنوان مثال
حالت 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 = (max_fixed - min_fixed) / (2 * m)
اکنون می توانیم عناصر تنسور خود را کمی کنیم:
result = round(input * s)
نکته ای که باید از آن مراقب باشید این است که اپراتور ممکن است مقادیر حداقل و حداکثر درخواستی را در طی فرآیند کوانتیزه کردن کمی تنظیم کند ، بنابراین شما همیشه باید از پورت های خروجی به عنوان محدوده محاسبات بیشتر استفاده کنید. به عنوان مثال ، اگر مقادیر حداقل و حداکثر درخواست شده نزدیک به برابر باشد ، آنها با یک مقدار اپسیلون کوچک از هم جدا می شوند تا از ایجاد بافرهای کوانتیزه بد شکل جلوگیری شود. در غیر این صورت ، می توانید در پایان بافرهایی قرار بگیرید که تمام مقادیر کوانتیزه شده با همان مقدار شناور نقشه برداری می کنند ، که این امر باعث مشکلاتی در عملکردهایی می شود که مجبورند محاسبات بیشتری روی آنها انجام دهند.
استدلال ها:
- دامنه: یک شی Sc Scope
- 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 :: ops :: QuantizeV2 :: Attrs | تنظیم کننده های ویژگی اختیاری برای QuantizeV2 . |
صفات عمومی
عمل
Operation operation
خروجی
::tensorflow::Output output
output_max
::tensorflow::Output output_max
خروجی_ دقیقه
::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 )
حالت RoundMode
Attrs RoundMode( StringPiece x )
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2020-04-20 بهوقت ساعت هماهنگ جهانی.