جریان تنسور:: عملیات:: کوانتیزه کردن
#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 مثال
حالت SCALED
با رویکرد کوانتیزاسیون مورد استفاده در QuantizeAndDequantize{V2|V3}
مطابقت دارد.
اگر حالت SCALED
باشد، از طیف کامل نوع خروجی استفاده نمیکنیم، و انتخاب میکنیم که کمترین مقدار ممکن را برای تقارن حذف کنیم (به عنوان مثال، محدوده خروجی 127- تا 127 است، نه 128- تا 127 برای کوانتیزاسیون 8 بیتی علامتدار). به طوری که 0.0 به 0 نقشه می دهد.
ابتدا محدوده مقادیر را در تانسور خود پیدا می کنیم. محدوده ای که استفاده می کنیم همیشه بر روی 0 متمرکز است، بنابراین 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
استدلال ها:
- 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 |
توابع استاتیک عمومی | |
---|---|
Mode (StringPiece 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 Mode( StringPiece x )
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2024-11-18 بهوقت ساعت هماهنگ جهانی.