tensorflow:: عملیات:: کوانتیزه کردن V2
#include <array_ops.h>تانسور «ورودی» از نوع اعشاری را به تانسور «خروجی» از نوع «T» کوانتیزه کنید.
خلاصه
[min_range، max_range] اعشاریهای اسکالر هستند که محدوده دادههای «ورودی» را مشخص میکنند. ویژگی «mode» دقیقاً محاسباتی را که برای تبدیل مقادیر اعشاری به معادلهای کوانتیزه شده آنها استفاده میشود، کنترل میکند. ویژگی «round_mode» الگوریتم گرد کردن tie-breaking را هنگام گرد کردن مقادیر اعشاری به معادلهای کوانتیزه شده آنها کنترل میکند.
در حالت '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 مشخص شوند. کوانتیزه کردن از اعشاری به quint8، هر مقدار ورودی را در 255/6 ضرب میکند و به quint8 تبدیل میکند.
اگر نوع خروجی qint8 ([-128, 127]) باشد، عملیات قبل از تبدیل، هر مقدار را به میزان ۱۲۸ کم میکند، به طوری که محدوده مقادیر با محدوده 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 باشد، از کل محدوده نوع خروجی استفاده نمیکنیم و کمترین مقدار ممکن برای تقارن را حذف میکنیم (مثلاً محدوده خروجی -۱۲۷ تا ۱۲۷ است، نه -۱۲۸ تا ۱۲۷ برای کوانتیزاسیون ۸ بیتی علامتدار)، به طوری که ۰.۰ به ۰ نگاشت میشود.
ابتدا محدوده مقادیر در تانسور خود را پیدا میکنیم. محدودهای که استفاده میکنیم همیشه روی ۰ متمرکز است، بنابراین 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:: عملیات:: QuantizeV2:: جذابیتها | تنظیمکنندههای ویژگی اختیاری برای QuantizeV2 . |
ویژگیهای عمومی
عملیات
Operation operation
خروجی
::tensorflow::Output output
خروجی_حداکثر
::tensorflow::Output output_max
خروجی_دقیقه
::tensorflow::Output output_min
کارکردهای عمومی
کوانتیزهV2
QuantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, DataType T )
کوانتیزهV2
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 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2026-11-05 بهوقت ساعت هماهنگ جهانی.