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 হয়, তাহলে আমরা আউটপুট টাইপের সম্পূর্ণ পরিসর ব্যবহার করি না, বরং প্রতিসাম্যের জন্য সর্বনিম্ন সম্ভাব্য মানটি বাদ দিই (যেমন, সাইনড ৮-বিট কোয়ান্টাইজেশনের জন্য আউটপুট পরিসর -১২৭ থেকে ১২৭, -১২৮ থেকে ১২৭ নয়), যাতে ০.০, ০-তে ম্যাপ করে।

প্রথমে আমরা আমাদের টেনসরের মানগুলির পরিসর নির্ণয় করি। আমরা যে পরিসরটি ব্যবহার করি তা সর্বদা 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 = (max_fixed - min_fixed) / (2 * m)

এখন আমরা আমাদের টেনসরের উপাদানগুলোকে কোয়ান্টাইজ করতে পারি:

result = round(input * s)

একটি বিষয় খেয়াল রাখতে হবে যে, কোয়ান্টাইজেশন প্রক্রিয়ার সময় অপারেটর অনুরোধ করা সর্বনিম্ন এবং সর্বোচ্চ মান সামান্য পরিবর্তন করতে পারেন, তাই পরবর্তী গণনার জন্য পরিসর হিসেবে সবসময় আউটপুট পোর্টগুলো ব্যবহার করা উচিত। উদাহরণস্বরূপ, যদি অনুরোধ করা সর্বনিম্ন এবং সর্বোচ্চ মান প্রায় সমান হয়, তবে ত্রুটিপূর্ণ কোয়ান্টাইজড বাফার তৈরি হওয়া রোধ করতে সেগুলোকে একটি ছোট এপসিলন মান দিয়ে আলাদা করা হবে। অন্যথায়, এমন বাফার তৈরি হতে পারে যেখানে সমস্ত কোয়ান্টাইজড মান একই ফ্লোট মানে ম্যাপ করে, যা সেইসব অপারেশনের জন্য সমস্যা সৃষ্টি করে যেগুলোকে সেগুলোর উপর পরবর্তী গণনা করতে হয়।

যুক্তি:

  • স্কোপ: একটি স্কোপ অবজেক্ট
  • min_range: ইনপুটের জন্য সম্ভাব্য সর্বনিম্ন স্কেলার মান।
  • max_range: ইনপুটের জন্য সম্ভাব্য সর্বোচ্চ স্কেলার মান।

ফেরত:

  • Output : ফ্লোট ইনপুট থেকে প্রাপ্ত কোয়ান্টাইজড ডেটা।
  • Output আউটপুট_মিন: আউটপুটের জন্য ব্যবহৃত প্রকৃত সর্বনিম্ন স্কেলার মান।
  • Output আউটপুট_ম্যাক্স: আউটপুটের জন্য ব্যবহৃত প্রকৃত সর্বোচ্চ স্কেলার মান।

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

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

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

Mode (StringPiece 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 Mode(
  StringPiece x
)

রাউন্ডমোড

Attrs RoundMode(
  StringPiece x
)