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

#include <array_ops.h>

تانسور «ورودی» را به یک تانسور اعشاری تبدیل کنید .

خلاصه

[min_range، max_range] اعشار اسکالر هستند که محدوده داده‌های «ورودی» را مشخص می‌کنند. ویژگی «mode» دقیقاً محاسباتی را که برای تبدیل مقادیر اعشاری به معادل‌های کوانتیزه شده آنها استفاده می‌شود، کنترل می‌کند.

در حالت 'MIN_COMBINED'، هر مقدار از تانسور دستخوش تغییرات زیر خواهد شد:

if T == qint8: in[i] += (range(T) + 1)/ 2.0
out[i] = min_range + (in[i]* (max_range - min_range) / range(T))
در اینجا range(T) = numeric_limits ::max() - numeric_limits ::min()

مثال حالت MIN_COMBINED

اگر ورودی از نوع QuantizedRelu6 باشد، نوع خروجی quint8 (محدوده 0-255) است، اما محدوده ممکن QuantizedRelu6 ، 0-6 است. بنابراین مقادیر min_range و max_range برابر با 0.0 و 6.0 هستند. Dequantize روی quint8 هر مقدار را می‌گیرد، به عدد اعشاری تبدیل می‌کند و در 6 / 255 ضرب می‌کند. توجه داشته باشید که اگر quantizedtype برابر با qint8 باشد، عملیات قبل از تبدیل، هر مقدار را 128 واحد اضافه می‌کند.

اگر حالت '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 = range / num_discrete_values
const double offset_input = static_cast(input) - lowest_quantized;
result = range_min + ((input - numeric_limits::min()) * range_scale)

مثال حالت مقیاس‌پذیر

حالت 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 = (2 * m) / (max_fixed - min_fixed)

اکنون می‌توانیم عناصر تانسور خود را واکانت‌زدایی کنیم:

result = input * s

استدلال‌ها:

  • دامنه: یک شیء دامنه
  • min_range: حداقل مقدار اسکالر که ممکن است برای ورودی تولید شود.
  • max_range: حداکثر مقدار اسکالر ممکن برای ورودی تولید می‌شود.

بازده:

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

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

Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range)
Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, const Dequantize::Attrs & attrs)

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

operation
output

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

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

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

Mode (StringPiece x)

ساختارها

tensorflow:: عملیات:: کمّی‌سازی:: جذابیت‌ها

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

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

عملیات

Operation operation

خروجی

::tensorflow::Output output

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

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

 Dequantize(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range
)

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

 Dequantize(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range,
  const Dequantize::Attrs & attrs
)

گره

::tensorflow::Node * node() const 

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

 operator::tensorflow::Input() const 

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

 operator::tensorflow::Output() const 

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

حالت

Attrs Mode(
  StringPiece x
)