Quantize

পাবলিক ফাইনাল ক্লাস কোয়ান্টাইজ

টাইপ ফ্লোটের 'ইনপুট' টেনসরকে 'T' টাইপের 'আউটপুট' টেনসরে পরিমাপ করুন।

[min_range, max_range] হল স্কেলার ফ্লোট যা 'ইনপুট' ডেটার জন্য পরিসীমা নির্দিষ্ট করে। 'মোড' অ্যাট্রিবিউট নিয়ন্ত্রণ করে ঠিক কোন গণনাগুলিকে ফ্লোট মানগুলিকে তাদের কোয়ান্টাইজড সমতুল্যগুলিতে রূপান্তর করতে ব্যবহৃত হয়৷ 'রাউন্ড_মোড' অ্যাট্রিবিউট নিয়ন্ত্রণ করে যে রাউন্ডিং টাই-ব্রেকিং অ্যালগরিদম ব্যবহার করা হয় যখন ফ্লোট মানগুলিকে তাদের কোয়ান্টাইজড সমতুল্যের সাথে রাউন্ডিং করা হয়।

'MIN_COMBINED' মোডে, টেনসরের প্রতিটি মান নিম্নলিখিতগুলির মধ্য দিয়ে যাবে:

out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
 if T == qint8: out[i] -= (range(T) + 1) / 2.0
 
এখানে `range(T) = numeric_limits ::max() - সাংখ্যিক_সীমা ::মিন()`

MIN_COMBINED মোডের উদাহরণ

অনুমান করুন ইনপুটটি ফ্লোট টাইপ এবং এটির সম্ভাব্য পরিসীমা [0.0, 6.0] এবং আউটপুট টাইপ হল quint8 ([0, 255])। min_range এবং max_range মান 0.0 এবং 6.0 হিসাবে নির্দিষ্ট করা উচিত। ফ্লোট থেকে quint8 পর্যন্ত পরিমাপ করা ইনপুটের প্রতিটি মানকে 255/6 দ্বারা গুণ করবে এবং quint8 এ কাস্ট করবে।

যদি আউটপুট টাইপটি qint8 ([-128, 127]) হয়, তবে অপারেশনটি কাস্ট করার আগে প্রতিটি মানকে 128 দ্বারা বিয়োগ করবে, যাতে মানগুলির পরিসরটি qint8 এর পরিসরের সাথে সারিবদ্ধ হয়।

যদি মোডটি '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 = num_discrete_values / range
 quantized = round(input * range_scale) - round(range_min * range_scale) +
   numeric_limits<T>::min()
 quantized = max(quantized, numeric_limits<T>::min())
 quantized = min(quantized, numeric_limits<T>::max())
 
এটি এবং MIN_COMBINED-এর মধ্যে সবচেয়ে বড় পার্থক্য হল ন্যূনতম পরিসরটি প্রথমে বৃত্তাকার করা হয়, বৃত্তাকার মান থেকে বিয়োগ করার আগে। MIN_COMBINED-এর সাথে, একটি ছোট পক্ষপাত প্রবর্তন করা হয় যেখানে পুনরাবৃত্ত পরিমাপ এবং ডিকোয়ান্টাইজ করার পুনরাবৃত্তি একটি বড় এবং বড় ত্রুটির পরিচয় দেবে।

স্কেলড মোড উদাহরণ

`স্কেলড` মোড `QuantizeAndDequantize{V2|V3}`-এ ব্যবহৃত কোয়ান্টাইজেশন পদ্ধতির সাথে মেলে।

মোডটি `স্কেলড` হলে, প্রতিটি ইনপুট মানকে একটি স্কেলিং_ফ্যাক্টর দ্বারা গুণ করে পরিমাপ করা হয়। স্কেলিং_ফ্যাক্টরটি `মিনিট_রেঞ্জ` এবং `সর্বোচ্চ_পরিসীমা` থেকে নির্ধারিত হয় যতটা সম্ভব বড় হতে যাতে `মিনিমাম_রেঞ্জ` থেকে `

const int min_T = std::numeric_limits<T>::min();
   const int max_T = std::numeric_limits<T>::max();
   const float max_float = std::numeric_limits<float>::max();
 
   const float scale_factor_from_min_side =
       (min_T * min_range > 0) ? min_T / min_range : max_float;
   const float scale_factor_from_max_side =
       (max_T * max_range > 0) ? max_T / max_range : max_float;
 
   const float scale_factor = std::min(scale_factor_from_min_side,
                                       scale_factor_from_max_side);
 
পর্যন্ত পরিসরটি T টাইপের মানগুলির মধ্যে উপস্থাপনযোগ্য হয়। max_range নিম্নরূপ:
min_range = min_T / scale_factor;
       max_range = max_T / scale_factor;
 
যেমন T = qint8, এবং প্রাথমিকভাবে min_range = -10, এবং max_range = 9, আমরা তুলনা করব -128/-10.0 = 12.8 থেকে 127/9.0 = 14.11, এবং স্কেলিং_ফ্যাক্টর = 1.8 এই ক্ষেত্রে সেট করব। , min_range -10 থাকবে, কিন্তু max_range 127 / 12.8 = 9.921875 এ সামঞ্জস্য করা হবে

তাই আমরা (-10, 9.921875) থেকে (-128, 127) পরিসরে ইনপুট মান পরিমাপ করব।

ইনপুট টেনসর এখন পরিমাপ করা যেতে পারে মানগুলিকে `min_range` থেকে `max_range` রেঞ্জে ক্লিপ করে, তারপর স্কেল_ফ্যাক্টর দ্বারা নিম্নরূপ গুণ করে:

result = round(min(max_range, max(min_range, input)) * scale_factor)
 
সামঞ্জস্য করা `min_range` এবং `max_range` এই অপারেশনের আউটপুট 2 এবং 3 হিসাবে ফেরত দেওয়া হয় . এই আউটপুটগুলিকে আরও গণনার জন্য পরিসীমা হিসাবে ব্যবহার করা উচিত।

narrow_range (bool) বৈশিষ্ট্য

সত্য হলে, আমরা ন্যূনতম পরিমাপযুক্ত মান ব্যবহার করি না। অর্থাৎ int8-এর জন্য কোয়ান্টাইজড আউটপুট, এটি সম্পূর্ণ -128..127 পরিসরের পরিবর্তে -127..127 পরিসরে সীমাবদ্ধ থাকবে। এটি নির্দিষ্ট অনুমান ব্যাকএন্ডের সাথে সামঞ্জস্যের জন্য সরবরাহ করা হয়েছে। (শুধুমাত্র স্কেলড মোডে প্রযোজ্য)

অক্ষ (int) বৈশিষ্ট্য

একটি ঐচ্ছিক `অক্ষ` অ্যাট্রিবিউট ইনপুট টেনসরের একটি ডাইমেনশন ইনডেক্স নির্দিষ্ট করতে পারে, যেমন কোয়ান্টাইজেশন রেঞ্জগুলি গণনা করা হবে এবং সেই মাত্রা বরাবর টেনসরের প্রতিটি স্লাইসের জন্য আলাদাভাবে প্রয়োগ করা হবে। এটি প্রতি-চ্যানেল কোয়ান্টাইজেশনের জন্য দরকারী।

যদি অক্ষ নির্দিষ্ট করা হয়, min_range এবং max_range

যদি `অক্ষ`=কোনও না হয়, প্রতি-টেনসরের পরিমাপ স্বাভাবিক হিসাবে সঞ্চালিত হয়।

নিশ্চিত_মিনিমাম_রেঞ্জ (ফ্লোট) অ্যাট্রিবিউট

ন্যূনতম পরিমাপ পরিসীমা অন্তত এই মান নিশ্চিত করে৷ এর জন্য লিগ্যাসি ডিফল্ট মান হল 0.01, কিন্তু নতুন ব্যবহারের জন্য এটিকে 0 এ সেট করার জন্য দৃঢ়ভাবে পরামর্শ দেওয়া হচ্ছে।

নেস্টেড ক্লাস

ক্লাস Quantize.Options Quantize জন্য ঐচ্ছিক বৈশিষ্ট্য

ধ্রুবক

স্ট্রিং OP_NAME এই অপের নাম, টেনসরফ্লো কোর ইঞ্জিন দ্বারা পরিচিত

পাবলিক পদ্ধতি

স্ট্যাটিক কোয়ান্টাইজ। অপশন
অক্ষ (দীর্ঘ অক্ষ)
স্ট্যাটিক <T TType প্রসারিত করে > Quantize <T>
তৈরি করুন ( স্কোপ স্কোপ, অপারেন্ড < TFloat32 > ইনপুট, Operand < TFloat32 > minRange, Operand < TFloat32 > maxRange, Class<T> T, বিকল্প... বিকল্প)
একটি নতুন কোয়ান্টাইজ অপারেশন মোড়ানো একটি ক্লাস তৈরি করার কারখানার পদ্ধতি।
স্ট্যাটিক কোয়ান্টাইজ। অপশন
নিশ্চিত মিনিমাম রেঞ্জ (ফ্লোট নিশ্চিত মিনিমাম রেঞ্জ)
স্ট্যাটিক কোয়ান্টাইজ। অপশন
মোড (স্ট্রিং মোড)
স্ট্যাটিক কোয়ান্টাইজ। অপশন
সংকীর্ণ রেঞ্জ (বুলিয়ান সংকীর্ণ রেঞ্জ)
আউটপুট <T>
আউটপুট ()
ফ্লোট ইনপুট থেকে উৎপন্ন কোয়ান্টাইজড ডেটা।
আউটপুট < TFloat32 >
আউটপুট ম্যাক্স ()
চূড়ান্ত পরিমাপ পরিসর সর্বাধিক, ইনপুট মানগুলিকে স্কেলিং করার আগে ক্লিপ করার জন্য ব্যবহৃত হয় এবং সেগুলিকে পরিমাপকৃত মানগুলিতে বৃত্তাকার করে।
আউটপুট < TFloat32 >
আউটপুটমিন ()
ন্যূনতম চূড়ান্ত পরিমাপ পরিসর, ইনপুট মানগুলিকে স্কেলিং করার আগে ক্লিপ করতে এবং পরিমাপকৃত মানগুলিতে বৃত্তাকার করার জন্য ব্যবহৃত হয়৷
স্ট্যাটিক কোয়ান্টাইজ। অপশন
রাউন্ডমোড (স্ট্রিং রাউন্ডমোড)

উত্তরাধিকারসূত্রে প্রাপ্ত পদ্ধতি

ধ্রুবক

সর্বজনীন স্ট্যাটিক চূড়ান্ত স্ট্রিং OP_NAME

এই অপের নাম, টেনসরফ্লো কোর ইঞ্জিন দ্বারা পরিচিত

ধ্রুবক মান: "QuantizeV2"

পাবলিক পদ্ধতি

পাবলিক স্ট্যাটিক কোয়ান্টাইজ। অপশন অক্ষ (দীর্ঘ অক্ষ)

পাবলিক স্ট্যাটিক কোয়ান্টাইজ <T> তৈরি করুন ( স্কোপ স্কোপ, অপারেন্ড < TFloat32 > ইনপুট, অপারেন্ড < TFloat32 > minRange, Operand < TFloat32 > maxRange, Class<T> T, বিকল্প... বিকল্প)

একটি নতুন কোয়ান্টাইজ অপারেশন মোড়ানো একটি ক্লাস তৈরি করার কারখানার পদ্ধতি।

পরামিতি
সুযোগ বর্তমান সুযোগ
মিনরেঞ্জ পরিমাপকরণ পরিসরের সর্বনিম্ন মান। এই মানটি অন্যান্য পরামিতিগুলির উপর নির্ভর করে অপ দ্বারা সামঞ্জস্য করা যেতে পারে। সামঞ্জস্য করা মান `output_min` এ লেখা হয়। যদি `অক্ষ` অ্যাট্রিবিউট নির্দিষ্ট করা থাকে, তাহলে এটি অবশ্যই একটি 1-D টেনসর হতে হবে যার আকার ইনপুট এবং আউটপুট টেনসরের `অক্ষ` মাত্রার সাথে মেলে।
সর্বোচ্চ রেঞ্জ পরিমাপকরণ পরিসরের সর্বোচ্চ মান। এই মানটি অন্যান্য পরামিতিগুলির উপর নির্ভর করে অপ দ্বারা সামঞ্জস্য করা যেতে পারে। সামঞ্জস্য করা মান `output_max` এ লেখা হয়। যদি `অক্ষ` অ্যাট্রিবিউট নির্দিষ্ট করা থাকে, তাহলে এটি অবশ্যই একটি 1-D টেনসর হতে হবে যার আকার ইনপুট এবং আউটপুট টেনসরের `অক্ষ` মাত্রার সাথে মেলে।
বিকল্প ঐচ্ছিক বৈশিষ্ট্য মান বহন করে
রিটার্নস
  • কোয়ান্টাইজের একটি নতুন উদাহরণ

পাবলিক স্ট্যাটিক কোয়ান্টাইজ। অপশন নিশ্চিত করে মিনিমাম রেঞ্জ (ফ্লোট নিশ্চিত মিনিমাম রেঞ্জ)

পাবলিক স্ট্যাটিক Quantize.Options মোড (স্ট্রিং মোড)

পাবলিক স্ট্যাটিক কোয়ান্টাইজ। অপশন সংকীর্ণ রেঞ্জ (বুলিয়ান সংকীর্ণ রেঞ্জ)

সর্বজনীন আউটপুট <T> আউটপুট ()

ফ্লোট ইনপুট থেকে উৎপন্ন কোয়ান্টাইজড ডেটা।

সর্বজনীন আউটপুট < TFloat32 > outputMax ()

চূড়ান্ত পরিমাপ পরিসর সর্বাধিক, ইনপুট মানগুলিকে স্কেলিং করার আগে ক্লিপ করার জন্য ব্যবহৃত হয় এবং সেগুলিকে পরিমাপকৃত মানগুলিতে বৃত্তাকার করে। যদি `অক্ষ` অ্যাট্রিবিউট নির্দিষ্ট করা থাকে, তাহলে এটি একটি 1-ডি টেনসর হবে যার আকার ইনপুট এবং আউটপুট টেনসরের `অক্ষ` মাত্রার সাথে মেলে।

সর্বজনীন আউটপুট < TFloat32 > outputMin ()

ন্যূনতম চূড়ান্ত পরিমাপ পরিসর, ইনপুট মানগুলিকে স্কেলিং করার আগে ক্লিপ করতে এবং পরিমাপকৃত মানগুলিতে বৃত্তাকার করার জন্য ব্যবহৃত হয়৷ যদি `অক্ষ` অ্যাট্রিবিউট নির্দিষ্ট করা থাকে, তাহলে এটি একটি 1-ডি টেনসর হবে যার আকার ইনপুট এবং আউটপুট টেনসরের `অক্ষ` মাত্রার সাথে মেলে।

পাবলিক স্ট্যাটিক কোয়ান্টাইজ। অপশন রাউন্ডমোড (স্ট্রিং রাউন্ডমোড)