tensorflow:: عملیات:: کوانتیزه کردن و کمّی کردن V2

#include <array_ops.h>

کوانتیزه می‌کند و سپس یک تانسور را واکانتیزه می‌کند.

خلاصه

این عملیات، اتلاف دقت حاصل از گذر رو به جلوی کوانتیزه شده را با استفاده از موارد زیر شبیه‌سازی می‌کند:

  1. کوانتیزه کردن تانسور به اعداد نقطه ثابت، که باید با روش کوانتیزه کردن هدف هنگام استفاده در استنتاج مطابقت داشته باشد.
  2. برای عملیات بعدی، به احتمال زیاد matmul، آن را به اعداد اعشاری تبدیل می‌کنیم.

روش‌های مختلفی برای کوانتیزه کردن وجود دارد. این نسخه فقط از مقیاس‌بندی استفاده می‌کند، بنابراین ۰.۰ به ۰ نگاشت می‌شود.

از مقدار مشخص شده 'num_bits' در نوع خروجی کوانتیزه شده، حداقل و حداکثر مقادیر کوانتیزه شده قابل نمایش را تعیین می‌کند.

مثلاً

  • [-128, 127] برای علامت‌دار، num_bits = 8، یا
  • ‎[0, 255]‎ برای بدون علامت، num_bits = 8.

اگر range_given == False باشد، مقادیر اولیه input_min و input_max به صورت خودکار به عنوان حداقل و حداکثر مقادیر در تانسور ورودی تعیین می‌شوند، در غیر این صورت از مقادیر مشخص شده input_min و input_max استفاده می‌شود.

نکته: اگر input_min و input_max مشخص شده باشند، نیازی نیست که با مقادیر حداقل و حداکثر واقعی در تانسور برابر باشند. برای مثال، در برخی موارد، مشخص کردن این مقادیر به گونه‌ای که احتمال وقوع کمترین مقدار در توزیع ورودی حذف شود، مفید خواهد بود.

این عملیات حداکثر scale_factor را تعیین می‌کند که محدوده اولیه [input_min, input_max] را به محدوده‌ای که در محدوده کوانتیزه شده قابل نمایش قرار دارد، نگاشت می‌کند.

این تابع مقیاس را از روی یکی از input_min و input_max تعیین می‌کند، سپس دیگری را به‌روزرسانی می‌کند تا محدوده قابل نمایش را به حداکثر برساند.

مثلاً

  • اگر خروجی علامت‌دار باشد، num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: از scale_factor برابر با -128 / -10.0 = 12.8 استفاده می‌کند. در این حالت، input_max را به 127 / 12.8 = 9.921875 به‌روزرسانی می‌کند.
  • اگر خروجی علامت‌دار باشد، num_bits = 8، [input_min, input_max] = [-10.0, 10.0]: از scale_factor برابر با 127 / 10.0 = 12.7 استفاده می‌کند. در این حالت، input_min را به 128.0 / 12.7 = -10.07874 به‌روزرسانی می‌کند.
  • اگر خروجی بدون علامت باشد، input_min مجبور به صفر شدن می‌شود و فقط از input_max مشخص شده استفاده می‌شود.

پس از تعیین scale_factor و به‌روزرسانی محدوده ورودی، موارد زیر را برای هر مقدار در تانسور «ورودی» اعمال می‌کند.

خروجی = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.)

تابع round فوق، مقدار را بر اساس round_mode داده شده گرد می‌کند.

استدلال‌ها:

  • دامنه: یک شیء دامنه
  • ورودی: تانسور برای کوانتیزه کردن و سپس واکانت‌زدایی.
  • input_min: اگر range_given == True ، این حداقل مقدار ورودی مورد نیاز برای نمایش را مشخص می‌کند، در غیر این صورت از مقدار حداقل تانسور input تعیین می‌شود.
  • input_max: اگر range_given == True ، این حداکثر مقدار ورودی مورد نیاز برای نمایش را مشخص می‌کند، در غیر این صورت از حداکثر مقدار تانسور input تعیین می‌شود.

ویژگی‌های اختیاری (به Attrs مراجعه کنید):

  • signed_input: اینکه آیا کوانتیزاسیون علامت‌دار است یا بدون علامت. (در واقع این پارامتر باید signed_output نامیده می‌شد)
  • num_bits: پهنای بیت کوانتیزاسیون.
  • range_given: اینکه آیا محدوده داده شده است یا باید از تانسور input تعیین شود.
  • round_mode: ویژگی 'round_mode' کنترل می‌کند که کدام الگوریتم گرد کردن tie-break هنگام گرد کردن مقادیر اعشاری به معادل‌های کوانتیزه شده آنها استفاده شود. حالت‌های گرد کردن زیر در حال حاضر پشتیبانی می‌شوند:
  • HALF_TO_EVEN: این حالت پیش‌فرض round_mode است.
  • HALF_UP: گرد کردن به سمت مثبت. در این حالت ۷.۵ به ۸ و -۷.۵ به -۷ گرد می‌شود.
  • narrow_range: اگر درست باشد، آنگاه قدر مطلق حداقل مقدار کوانتیزه شده برابر با حداکثر مقدار کوانتیزه شده است، نه ۱ واحد بیشتر. یعنی برای کوانتیزه کردن ۸ بیتی، حداقل مقدار به جای -۱۲۸، -۱۲۷ است.
  • محور: در صورت مشخص شدن، این محور به عنوان محور کانال یا برش در نظر گرفته می‌شود و برای هر کانال یا برش در امتداد این محور، یک محدوده کوانتیزاسیون جداگانه استفاده می‌شود.

بازده:

  • Output : تانسور خروجی.

سازنده‌ها و مخرب‌ها

QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max)
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs)

ویژگی‌های عمومی

operation
output

کارکردهای عمومی

node () const
::tensorflow::Node *
operator::tensorflow::Input () const
operator::tensorflow::Output () const

توابع استاتیک عمومی

Axis (int64 x)
NarrowRange (bool x)
NumBits (int64 x)
RangeGiven (bool x)
RoundMode (StringPiece x)
SignedInput (bool x)

ساختارها

tensorflow:: عملیات:: QuantizeAndDequantizeV2:: جذابیت‌ها

تنظیم‌کننده‌های ویژگی اختیاری برای QuantizeAndDequantizeV2 .

ویژگی‌های عمومی

عملیات

Operation operation

خروجی

::tensorflow::Output output

کارکردهای عمومی

کوانتیزه و کمانتیزه کردنV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max
)

کوانتیزه و کمانتیزه کردنV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max,
  const QuantizeAndDequantizeV2::Attrs & attrs
)

گره

::tensorflow::Node * node() const 

عملگر::tensorflow::ورودی

 operator::tensorflow::Input() const 

عملگر::tensorflow::خروجی

 operator::tensorflow::Output() const 

توابع استاتیک عمومی

محور

Attrs Axis(
  int64 x
)

محدوده باریک

Attrs NarrowRange(
  bool x
)

نام‌بیتس

Attrs NumBits(
  int64 x
)

محدوده داده شده

Attrs RangeGiven(
  bool x
)

حالت گرد

Attrs RoundMode(
  StringPiece x
)

ورودی امضا شده

Attrs SignedInput(
  bool x
)