جریان تنسور:: عملیات:: 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()
مثال حالت 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
باشد، کوانتیزاسیون با ضرب هر مقدار ورودی در یک scaling_factor انجام میشود. scaling_factor از min_range
و max_range
تا حد امکان بزرگ تعیین می شود به طوری که محدوده از min_range
تا max_range
قابل نمایش در مقادیر نوع T باشد.
const int min_T = std::numeric_limits::min(); const int max_T = std::numeric_limits ::max(); const float max_float = std::numeric_limits ::max();
const float scale_factor_from_min_side = (min_T * min_range > 0) ? min_T / min_range : max_float; const float scale_factor_from_max_side = (max_T * max_range > 0) ? max_T / max_range : max_float;
const float scale_factor = std::min(scale_factor_from_min_side, scale_factor_from_max_side);سپس از scale_factor برای تنظیم min_range و max_range به صورت زیر استفاده می کنیم:
min_range = min_T / scale_factor; max_range = max_T / scale_factor;به عنوان مثال، اگر T = qint8، و در ابتدا min_range = -10، و max_range = 9، -128/-10.0 = 12.8 را با 127/9.0 = 14.11 مقایسه می کنیم، و scaling_factor = 12.8 را تنظیم می کنیم در این حالت، min_range -10 باقی می ماند. اما max_range به 127 / 12.8 = 9.921875 تنظیم می شود
بنابراین مقادیر ورودی را در محدوده (-10، 9.921875) تا (128-127) کوانتیزه می کنیم.
اکنون می توان تانسور ورودی را با برش مقادیر در محدوده
min_range
تاmax_range
، و سپس ضرب در scale_factor به صورت زیر تعیین کرد:
result = round(min(max_range, max(min_range, input)) * scale_factor)
min_range
وmax_range
تنظیم شده به عنوان خروجی های 2 و 3 این عملیات برگردانده می شوند. این خروجی ها باید به عنوان محدوده برای هر گونه محاسبات بیشتر استفاده شوند.خصیصه narrow_range (bool).
اگر درست باشد، از حداقل مقدار کوانتیزه استفاده نمی کنیم. یعنی برای int8 خروجی کوانتیزه شده، به جای محدوده کامل -128..127 به محدوده -127..127 محدود می شود. این برای سازگاری با باطن استنتاج خاصی ارائه شده است. (فقط برای حالت SCALED اعمال می شود)
ویژگی محور (int).
یک ویژگی
axis
اختیاری میتواند یک شاخص بعد از تانسور ورودی را مشخص کند، به طوری که محدودههای کوانتیزاسیون به طور جداگانه برای هر برش از تانسور در امتداد آن بعد محاسبه و اعمال میشود. این برای کوانتیزاسیون هر کانال مفید است.اگر محور مشخص شده باشد، min_range و max_range
اگر
axis
=هیچکدام باشد، کوانتیزاسیون در هر تانسور به صورت عادی انجام میشود.ویژگی sure_minimum_range (float).
اطمینان حاصل می کند که حداقل محدوده کوانتیزاسیون حداقل این مقدار است. مقدار پیشفرض قدیمی برای این 0.01 است، اما اکیداً پیشنهاد میشود آن را برای استفادههای جدید روی 0 تنظیم کنید.
استدلال ها:
- scope: یک شی Scope
- min_range: حداقل مقدار محدوده کوانتیزاسیون. این مقدار ممکن است بسته به پارامترهای دیگر توسط op تنظیم شود. مقدار تنظیم شده در
output_min
نوشته می شود. اگر ویژگیaxis
مشخص شده باشد، این باید یک تانسور 1 بعدی باشد که اندازه آن با بعدaxis
تانسورهای ورودی و خروجی مطابقت داشته باشد. - max_range: حداکثر مقدار محدوده کوانتیزاسیون. این مقدار ممکن است بسته به پارامترهای دیگر توسط op تنظیم شود. مقدار تنظیم شده به
output_max
نوشته می شود. اگر ویژگیaxis
مشخص شده باشد، این باید یک تانسور 1 بعدی باشد که اندازه آن با بعدaxis
تانسورهای ورودی و خروجی مطابقت داشته باشد.
برمی گرداند:
- خروجی
Output
: داده های کوانتیزه شده تولید شده از ورودی شناور. -
Output
output_min: حداقل محدوده کوانتیزاسیون نهایی که برای برش مقادیر ورودی قبل از مقیاس بندی و گرد کردن آنها به مقادیر کوانتیزه استفاده می شود. اگر ویژگیaxis
مشخص شده باشد، این یک تانسور 1 بعدی خواهد بود که اندازه آن با بعدaxis
تانسورهای ورودی و خروجی مطابقت دارد. -
Output
output_max: حداکثر دامنه کوانتیزاسیون نهایی که برای برش مقادیر ورودی قبل از مقیاس بندی و گرد کردن آنها به مقادیر کوانتیزه استفاده می شود. اگر ویژگیaxis
مشخص شده باشد، این یک تانسور 1 بعدی خواهد بود که اندازه آن با بعدaxis
تانسورهای ورودی و خروجی مطابقت دارد.
سازندگان و ویرانگرها | |
---|---|
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 |
توابع استاتیک عمومی | |
---|---|
Axis (int64 x) | |
EnsureMinimumRange (float x) | |
Mode (StringPiece x) | |
NarrowRange (bool 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 Axis( int64 x )
حداقل محدوده را تضمین کنید
Attrs EnsureMinimumRange( float x )
حالت
Attrs Mode( StringPiece x )
محدوده باریک
Attrs NarrowRange( bool x )
حالت گرد
Attrs RoundMode( StringPiece x )
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2024-11-21 بهوقت ساعت هماهنگ جهانی.