tensorflow:: ops:: QuantizeV2

#include <array_ops.h>

float টাইপের 'ইনপুট' টেনসরকে 'T' টাইপের 'আউটপুট' টেনসরে কোয়ান্টাইজ করুন।

সারসংক্ষেপ

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

'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() - numeric_limits ::min()

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

ধরে নিন ইনপুটটি float টাইপের এবং এর সম্ভাব্য রেঞ্জ [0.0, 6.0] এবং আউটপুট টাইপটি quint8 ([0, 255])। min_range এবং max_range-এর মান 0.0 এবং 6.0 হিসেবে নির্দিষ্ট করতে হবে। float থেকে 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::min()
quantized = max(quantized, numeric_limits::min())
quantized = min(quantized, numeric_limits::max())

এটির এবং MIN_COMBINED-এর মধ্যে সবচেয়ে বড় পার্থক্য হলো, সর্বনিম্ন পরিসরটিকে প্রথমে রাউন্ড করা হয় এবং তারপর রাউন্ড করা মান থেকে বিয়োগ করা হয়। MIN_COMBINED ব্যবহার করলে একটি ছোট বায়াস তৈরি হয়, যেখানে বারবার কোয়ান্টাইজিং এবং ডিকোয়ান্টাইজিং করার ফলে একটি ক্রমবর্ধমান ত্রুটি দেখা দেয়।

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

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

মোডটি যদি SCALED হয়, তাহলে প্রতিটি ইনপুট মানকে একটি scaling_factor দিয়ে গুণ করে কোয়ান্টাইজেশন করা হয়। scaling_factor-টি min_range এবং max_range থেকে যথাসম্ভব বড় করে নির্ধারণ করা হয়, যাতে min_range থেকে max_range পর্যন্ত পরিসরটি T টাইপের মানের মধ্যে উপস্থাপনযোগ্য হয়।

  

  const int min_T = std::numeric_limits::min();
  const int max_T = std::numeric_limits::max();
  const float max_float = std::numeric_limits::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);

এরপরে আমরা `scale_factor` ব্যবহার করে `min_range` এবং `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 তুলনা করে scaling_factor = 12.8 সেট করব। এক্ষেত্রে, min_range -10-ই থাকবে, কিন্তু max_range 127 / 12.8 = 9.921875-এ সমন্বয় করা হবে।

সুতরাং আমরা ইনপুট মানগুলিকে (-10, 9.921875) থেকে (-128, 127) পরিসরের মধ্যে কোয়ান্টাইজ করব।

এখন ইনপুট টেনসরটিকে min_range থেকে max_range সীমার মধ্যে মান ক্লিপ করে, তারপর scale_factor দিয়ে গুণ করে নিম্নোক্তভাবে কোয়ান্টাইজ করা যেতে পারে:

result = round(min(max_range, max(min_range, input)) * scale_factor)

এই অপারেশনের আউটপুট ২ এবং ৩ হিসাবে সমন্বয়কৃত min_range এবং max_range ফেরত দেওয়া হয়। পরবর্তী যেকোনো গণনার জন্য এই আউটপুটগুলিকেই পরিসীমা হিসাবে ব্যবহার করা উচিত।

সংকীর্ণ_পরিসর (বুলিয়ান) অ্যাট্রিবিউট

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

অক্ষ (পূর্ণসংখ্যা) বৈশিষ্ট্য

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

অক্ষ নির্দিষ্ট করা থাকলে, min_range এবং max_range

যদি axis = None হয়, তাহলে প্রতি-টেনসর কোয়ান্টাইজেশন স্বাভাবিকভাবে সম্পাদিত হয়।

ensure_minimum_range (ফ্লোট) অ্যাট্রিবিউট

এটি নিশ্চিত করে যে সর্বনিম্ন কোয়ান্টাইজেশন পরিসর অন্তত এই মানের সমান বা তার বেশি। এর পুরোনো ডিফল্ট মান হলো ০.০১, কিন্তু নতুন ব্যবহারের জন্য এটিকে ০-তে সেট করার জন্য জোরালোভাবে পরামর্শ দেওয়া হচ্ছে।

যুক্তি:

  • স্কোপ: একটি স্কোপ অবজেক্ট
  • min_range: কোয়ান্টাইজেশন রেঞ্জের সর্বনিম্ন মান। অন্যান্য প্যারামিটারের উপর নির্ভর করে এই মানটি op দ্বারা সামঞ্জস্য করা যেতে পারে। সামঞ্জস্যকৃত মানটি output_min এ লেখা হয়। যদি axis অ্যাট্রিবিউটটি নির্দিষ্ট করা থাকে, তবে এটি অবশ্যই একটি 1-D টেনসর হতে হবে যার আকার ইনপুট এবং আউটপুট টেনসরের axis মাত্রার সাথে মেলে।
  • max_range: কোয়ান্টাইজেশন রেঞ্জের সর্বোচ্চ মান। অন্যান্য প্যারামিটারের উপর নির্ভর করে এই মানটি অপ দ্বারা সামঞ্জস্য করা যেতে পারে। সামঞ্জস্যকৃত মানটি output_max এ লেখা হয়। যদি axis অ্যাট্রিবিউটটি নির্দিষ্ট করা থাকে, তবে এটি অবশ্যই একটি ১-মাত্রিক টেনসর হতে হবে যার আকার ইনপুট এবং আউটপুট টেনসরের axis মাত্রার সাথে মেলে।

ফেরত:

  • Output : ফ্লোট ইনপুট থেকে প্রাপ্ত কোয়ান্টাইজড ডেটা।
  • Output আউটপুট_মিন: চূড়ান্ত কোয়ান্টাইজেশন পরিসরের সর্বনিম্ন মান, যা ইনপুট মানগুলোকে স্কেলিং এবং রাউন্ডিং করে কোয়ান্টাইজড মানে পরিণত করার আগে ক্লিপ করতে ব্যবহৃত হয়। যদি axis অ্যাট্রিবিউটটি নির্দিষ্ট করা থাকে, তবে এটি একটি ১-ডি টেনসর হবে যার আকার ইনপুট এবং আউটপুট টেনসরের axis ডাইমেনশনের সাথে মিলে যাবে।
  • Output আউটপুট_ম্যাক্স: চূড়ান্ত কোয়ান্টাইজেশন পরিসরের সর্বোচ্চ সীমা, যা ইনপুট মানগুলোকে স্কেলিং এবং রাউন্ডিং করে কোয়ান্টাইজড মানে পরিণত করার আগে ক্লিপ করতে ব্যবহৃত হয়। যদি ' axis অ্যাট্রিবিউটটি নির্দিষ্ট করা থাকে, তবে এটি একটি ১-মাত্রিক টেনসর হবে যার আকার ইনপুট এবং আউটপুট টেনসরের axis মাত্রার সাথে মিলে যাবে।

নির্মাতা এবং ধ্বংসকারী

QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T)
QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T, const QuantizeV2::Attrs & attrs)

জনসাধারণের বৈশিষ্ট্য

operation
output
output_max
output_min

পাবলিক স্ট্যাটিক ফাংশন

Axis (int64 x)
EnsureMinimumRange (float x)
Mode (StringPiece x)
NarrowRange (bool x)
RoundMode (StringPiece x)

কাঠামো

tensorflow:: ops:: QuantizeV2:: Attrs

QuantizeV2-এর জন্য ঐচ্ছিক অ্যাট্রিবিউট সেটারসমূহ।

জনসাধারণের বৈশিষ্ট্য

অপারেশন

Operation operation

আউটপুট

::tensorflow::Output output

আউটপুট_সর্বোচ্চ

::tensorflow::Output output_max

আউটপুট_মিনিট

::tensorflow::Output output_min

জনসাধারণের কার্যাবলী

QuantizeV2

 QuantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range,
  DataType T
)

QuantizeV2

 QuantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range,
  DataType T,
  const QuantizeV2::Attrs & attrs
)

পাবলিক স্ট্যাটিক ফাংশন

অক্ষ

Attrs Axis(
  int64 x
)

ন্যূনতম পরিসর নিশ্চিত করুন

Attrs EnsureMinimumRange(
  float x
)

মোড

Attrs Mode(
  StringPiece x
)

সংকীর্ণ পরিসর

Attrs NarrowRange(
  bool x
)

রাউন্ডমোড

Attrs RoundMode(
  StringPiece x
)