টাইপ ফ্লোটের 'ইনপুট' টেনসরকে '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
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())
স্কেলড মোড উদাহরণ
`স্কেলড` মোড `QuantizeAndDequantize{V2|V3}`-এ ব্যবহৃত কোয়ান্টাইজেশন পদ্ধতির সাথে মেলে।
মোডটি `স্কেলড` হলে, প্রতিটি ইনপুট মানকে একটি স্কেলিং_ফ্যাক্টর দ্বারা গুণ করে পরিমাপ করা হয়। স্কেলিং_ফ্যাক্টর নির্ধারণ করা হয় `মিনিমাম_পরিসর` এবং `সর্বোচ্চ_পরিসীমা` থেকে যতটা সম্ভব বড় হতে যাতে `মিনিমাম_পরিসীমা` থেকে `সর্বোচ্চ_পরিসীমা` পর্যন্ত T মানের মানের মধ্যে উপস্থাপন করা যায়।
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);
min_range = min_T / scale_factor;
max_range = max_T / scale_factor;
তাই আমরা (-10, 9.921875) থেকে (-128, 127) পরিসরে ইনপুট মান পরিমাপ করব।
ইনপুট টেনসরকে এখন পরিমাপ করা যেতে পারে মান ক্লিপ করে `মিনিট_রেঞ্জ` থেকে `ম্যাক্স_রেঞ্জ`, তারপর স্কেল_ফ্যাক্টর দিয়ে গুণ করে নিম্নরূপ:
result = round(min(max_range, max(min_range, input)) * scale_factor)
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> | |
স্ট্যাটিক কোয়ান্টাইজ। অপশন | নিশ্চিত মিনিমাম রেঞ্জ (ফ্লোট নিশ্চিত মিনিমাম রেঞ্জ) |
স্ট্যাটিক কোয়ান্টাইজ। অপশন | মোড (স্ট্রিং মোড) |
স্ট্যাটিক কোয়ান্টাইজ। অপশন | সংকীর্ণ রেঞ্জ (বুলিয়ান সংকীর্ণ রেঞ্জ) |
আউটপুট <T> | আউটপুট () ফ্লোট ইনপুট থেকে উৎপন্ন কোয়ান্টাইজড ডেটা। |
আউটপুট < TFloat32 > | আউটপুট ম্যাক্স () চূড়ান্ত পরিমাপ পরিসর সর্বাধিক, ইনপুট মানগুলিকে স্কেলিং করার আগে ক্লিপ করার জন্য ব্যবহৃত হয় এবং সেগুলিকে পরিমাপকৃত মানগুলিতে বৃত্তাকার করে। |
আউটপুট < TFloat32 > | আউটপুটমিন () ন্যূনতম চূড়ান্ত পরিমাপ পরিসর, ইনপুট মানগুলিকে স্কেলিং করার আগে ক্লিপ করতে এবং পরিমাপকৃত মানগুলিতে বৃত্তাকার করার জন্য ব্যবহৃত হয়৷ |
স্ট্যাটিক কোয়ান্টাইজ। অপশন | রাউন্ডমোড (স্ট্রিং রাউন্ডমোড) |
উত্তরাধিকারসূত্রে প্রাপ্ত পদ্ধতি
ধ্রুবক
সর্বজনীন স্ট্যাটিক চূড়ান্ত স্ট্রিং OP_NAME
এই অপের নাম, টেনসরফ্লো কোর ইঞ্জিন দ্বারা পরিচিত
পাবলিক পদ্ধতি
পাবলিক স্ট্যাটিক কোয়ান্টাইজ <T> তৈরি করুন ( স্কোপ স্কোপ, অপারেন্ড < TFloat32 > ইনপুট, অপারেন্ড < TFloat32 > minRange, Operand < TFloat32 > maxRange, Class<T> T, বিকল্প... বিকল্প)
একটি নতুন কোয়ান্টাইজ অপারেশন মোড়ানো একটি ক্লাস তৈরি করার কারখানার পদ্ধতি।
পরামিতি
সুযোগ | বর্তমান সুযোগ |
---|---|
মিনরেঞ্জ | পরিমাপকরণ পরিসরের সর্বনিম্ন মান। এই মানটি অন্যান্য পরামিতিগুলির উপর নির্ভর করে অপ দ্বারা সামঞ্জস্য করা যেতে পারে। সামঞ্জস্য করা মান `output_min` এ লেখা হয়। যদি `অক্ষ` অ্যাট্রিবিউট নির্দিষ্ট করা থাকে, তাহলে এটি অবশ্যই একটি 1-D টেনসর হতে হবে যার আকার ইনপুট এবং আউটপুট টেনসরের `অক্ষ` মাত্রার সাথে মেলে। |
সর্বোচ্চ রেঞ্জ | পরিমাপকরণ পরিসরের সর্বোচ্চ মান। এই মানটি অন্যান্য পরামিতিগুলির উপর নির্ভর করে অপ দ্বারা সামঞ্জস্য করা যেতে পারে। সামঞ্জস্য করা মান `output_max` এ লেখা হয়। যদি `অক্ষ` অ্যাট্রিবিউট নির্দিষ্ট করা থাকে, তাহলে এটি অবশ্যই একটি 1-D টেনসর হতে হবে যার আকার ইনপুট এবং আউটপুট টেনসরের `অক্ষ` মাত্রার সাথে মেলে। |
বিকল্প | ঐচ্ছিক বৈশিষ্ট্য মান বহন করে |
রিটার্নস
- কোয়ান্টাইজের একটি নতুন উদাহরণ
সর্বজনীন আউটপুট < TFloat32 > outputMax ()
চূড়ান্ত পরিমাপ পরিসর সর্বাধিক, ইনপুট মানগুলিকে স্কেলিং করার আগে ক্লিপ করার জন্য ব্যবহৃত হয় এবং সেগুলিকে পরিমাপকৃত মানগুলিতে বৃত্তাকার করে। যদি `অক্ষ` অ্যাট্রিবিউট নির্দিষ্ট করা থাকে, তাহলে এটি একটি 1-D টেনসর হবে যার আকার ইনপুট এবং আউটপুট টেনসরের `অক্ষ` মাত্রার সাথে মেলে।
সর্বজনীন আউটপুট < TFloat32 > outputMin ()
ন্যূনতম চূড়ান্ত পরিমাপ পরিসর, ইনপুট মানগুলিকে স্কেলিং করার আগে ক্লিপ করতে এবং পরিমাপকৃত মানগুলিতে বৃত্তাকার করার জন্য ব্যবহৃত হয়৷ যদি `অক্ষ` অ্যাট্রিবিউট নির্দিষ্ট করা থাকে, তাহলে এটি একটি 1-D টেনসর হবে যার আকার ইনপুট এবং আউটপুট টেনসরের `অক্ষ` মাত্রার সাথে মেলে।