টেনসরফ্লো :: অপস:: 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 হয়, আমরা আউটপুট প্রকারের সম্পূর্ণ পরিসর ব্যবহার করি না, প্রতিসাম্যের জন্য সম্ভাব্য সর্বনিম্ন মানকে এলিড করতে বেছে নিই (যেমন, আউটপুট পরিসীমা -127 থেকে 127, স্বাক্ষরিত 8 বিট কোয়ান্টাইজেশনের জন্য -128 থেকে 127 নয়), যাতে 0.0 মানচিত্র 0 থেকে

আমরা প্রথমে আমাদের টেনসরে মানের পরিসীমা খুঁজে পাই। আমরা যে ব্যাপ্তিটি ব্যবহার করি তা সর্বদা 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 = (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

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

রাউন্ডমোড

Attrs RoundMode(
  StringPiece x
)