جریان تنسور:: عملیات:: QuantizeAndDequantizeV2

#include <array_ops.h>

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

خلاصه

این عملیات تلفات دقت را از عبور کوانتیزه شده به جلو شبیه سازی می کند:

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

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

از «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_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.07 = 12.07 - 128.0 / 12.07 - 8 استفاده می کند.
  • اگر خروجی بدون علامت باشد، input_min مجبور می شود 0 باشد و فقط input_max مشخص شده استفاده می شود.

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

خروجی = گرد (گیره (مقدار، ورودی_دقیقه، حداکثر ورودی) * ضریب_مقیاس) / ضریب_مقیاس.

تابع دور بالا مقدار را بر اساس round_mode داده شده گرد می کند.

استدلال ها:

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

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

  • signed_input: اینکه آیا کوانتیزاسیون دارای علامت یا بدون علامت باشد. (در واقع این پارامتر باید signed_output نامیده می شد)
  • num_bits: پهنای بیت کوانتیزاسیون.
  • range_given: اینکه آیا محدوده داده شده است یا باید از تانسور input تعیین شود.
  • round_mode: ویژگی «round_mode» کنترل می‌کند که کدام الگوریتم گره‌شکنی گرد هنگام گرد کردن مقادیر شناور به معادل‌های کوانتیزه‌شده آن‌ها استفاده می‌شود. حالت های گرد کردن زیر در حال حاضر پشتیبانی می شوند:
  • HALF_TO_EVEN: این حالت round_mode پیش‌فرض است.
  • HALF_UP: به سمت مثبت گرد کنید. در این حالت 7.5 دور تا 8 و -7.5 دور تا -7.
  • narrow_range: اگر True باشد، قدر مطلق حداقل مقدار کوانتیزه شده به جای 1 بزرگتر، همان مقدار حداکثر کوانتیزه شده است. یعنی برای کوانتیزاسیون 8 بیتی، حداقل مقدار 127- به جای 128- است.

برمی گرداند:

  • 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

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

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

سازه ها

tensorflow:: ops:: QuantizeAndDequantizeV2:: Attrs

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

صفات عمومی

عملیات

Operation operation

خروجی

::tensorflow::Output output

توابع عمومی

QuantizeAndDequantizeV2

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

QuantizeAndDequantizeV2

 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 NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

RangeGiven

Attrs RangeGiven(
  bool x
)

حالت گرد

Attrs RoundMode(
  StringPiece x
)

SignedInput

Attrs SignedInput(
  bool x
)