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

#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() range(T) = numeric_limits ::max() - numeric_limits ::min() 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 باشد، dequantization با ضرب هر مقدار ورودی در یک scaling_factor انجام می شود. (بنابراین ورودی 0 همیشه به 0.0 نشان داده می شود).

scaling_factor از min_range ، max_range و narrow_range به روشی که با QuantizeAndDequantize{V2|V3} و QuantizeV2 سازگار است، با استفاده از الگوریتم زیر تعیین می‌شود:

  

  const int min_expected_T = std::numeric_limits::min() +
    (narrow_range ? 1 : 0);
  const int max_expected_T = std::numeric_limits::max();
  const float max_expected_T = std::numeric_limits::max();

  const float scale_factor =
    (std::numeric_limits::min() == 0) ? (max_range / max_expected_T)
                                         : std::max(min_range / min_expected_T,
                                                    max_range / max_expected_T);

استدلال ها:

  • scope: یک شی Scope
  • 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

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

Axis (int64 x)
Mode (StringPiece x)
NarrowRange (bool x)

سازه ها

tensorflow:: ops:: Dequantize:: Attrs

تنظیم کننده های ویژگی اختیاری برای 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 Axis(
  int64 x
)

حالت

Attrs Mode(
  StringPiece x
)

محدوده باریک

Attrs NarrowRange(
  bool x
)