টেনসরফ্লো :: অপস:: QuantizeV2

#include <array_ops.h>

টাইপ ফ্লোটের 'ইনপুট' টেনসরকে '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() - numeric_limits ::min() range(T) = numeric_limits ::max() - numeric_limits ::min() range(T) = numeric_limits ::max() - numeric_limits ::min()

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::min()
quantized = max(quantized, numeric_limits::min())
quantized = min(quantized, numeric_limits::max())

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

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

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

মোডটি SCALED হলে, প্রতিটি ইনপুট মানকে একটি স্কেলিং_ফ্যাক্টর দ্বারা গুণ করে পরিমাপ করা হয়। স্কেলিং_ফ্যাক্টরটি 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);

আমরা পরবর্তীতে নিম্নরূপ 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 রেঞ্জে মান ক্লিপ করে ইনপুট টেনসরকে এখন পরিমাপ করা যেতে পারে, তারপর নিম্নরূপ স্কেল_ফ্যাক্টর দ্বারা গুণ করে:

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) বৈশিষ্ট্য

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

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

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

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

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

যুক্তি:

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

রিটার্ন:

  • Output আউটপুট: ফ্লোট ইনপুট থেকে উৎপন্ন কোয়ান্টাইজড ডেটা।
  • Output আউটপুট_মিন: চূড়ান্ত পরিমাপ পরিসীমা সর্বনিম্ন, ইনপুট মানগুলিকে স্কেল করার আগে ক্লিপ করার জন্য ব্যবহৃত হয় এবং সেগুলিকে পরিমাপকৃত মানগুলিতে বৃত্তাকার করে। axis বৈশিষ্ট্য নির্দিষ্ট করা হলে, এটি একটি 1-ডি টেনসর হবে যার আকার ইনপুট এবং আউটপুট টেনসরের axis মাত্রার সাথে মেলে।
  • Output আউটপুট_ম্যাক্স: চূড়ান্ত পরিমাপ পরিসীমা সর্বাধিক, ইনপুট মানগুলিকে স্কেল করার আগে ক্লিপ করার জন্য ব্যবহৃত হয় এবং সেগুলিকে পরিমাপকৃত মানগুলিতে বৃত্তাকার করে। axis বৈশিষ্ট্য নির্দিষ্ট করা হলে, এটি একটি 1-ডি টেনসর হবে যার আকার ইনপুট এবং আউটপুট টেনসরের 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

output_max

::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
)