Google I/O-তে টিউন করার জন্য ধন্যবাদ। চাহিদা অনুযায়ী সব সেশন দেখুন চাহিদা অনুযায়ী দেখুন

সেন্সরফ্লো :: অপস :: কোয়ান্টিজভি 2

#include <array_ops.h>

টাইপ ফ্লোটের 'ইনপুট' সেন্সরটির পরিমাণ 'আউটপুট' টাইপ 'টি' করুন an

সারসংক্ষেপ

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

'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] এবং আউটপুট টাইপটি কুইন্ট 8 ([0, 255])। মিনি_রেঞ্জ এবং সর্বোচ্চ_আরজ মানগুলি 0.0 এবং 6.0 হিসাবে নির্দিষ্ট করা উচিত। ভাসা থেকে কুইন্ট 8-তে পরিমাণ নির্ধারণ করা ইনপুটটির প্রতিটি মান 255/6 দ্বারা গুণিত করে কুইন্ট 8 এ দেবে।

যদি আউটপুট ধরণটি কুইন্ট 8 ([-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} ব্যবহৃত কোয়ান্টাইজেশন পদ্ধতির সাথে মেলে QuantizeAndDequantize{V2|V3}

মোডটি যদি SCALED , তবে আমরা SCALED সম্পূর্ণ পরিসীমা ব্যবহার করি না, SCALED জন্য সর্বনিম্ন সম্ভাব্য মানটি এলিডে বেছে নেওয়া (উদাহরণস্বরূপ, স্বাক্ষরিত 8 বিট কোয়ান্টাইজেশনের জন্য -128 থেকে 127 নয়), 128 থেকে 127 হয় না, যাতে ০.০ তে মানচিত্র।

আমরা প্রথমে আমাদের সেন্সরে মানগুলির ব্যাপ্তি খুঁজে পাই। আমরা যে ব্যাপ্তিটি ব্যবহার করি তা সর্বদা 0 তে কেন্দ্রিক হয়, সুতরাং আমরা এম এর মতো দেখতে পাই

  m = max(abs(input_min), abs(input_max))

আমাদের ইনপুট টেনসর পরিসীমাটি তখন [-m, m]

এরপরে, আমরা আমাদের ফিক্সড-পয়েন্ট কোয়ান্টাইজেশন বালতি, [min_fixed, max_fixed] । যদি টি স্বাক্ষরিত হয় তবে এটি

  num_bits = sizeof(T) * 8
  [min_fixed, max_fixed] =
      [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]

অন্যথায়, যদি টি স্বাক্ষরযুক্ত না হয় তবে নির্দিষ্ট পয়েন্টের ব্যাপ্তি

  [min_fixed, max_fixed] = [0, (1 << num_bits) - 1]

এটি থেকে আমরা আমাদের স্কেলিং ফ্যাক্টর, গুলি গণনা করি:

  s = (max_fixed - min_fixed) / (2 * m)

এখন আমরা আমাদের সেন্সরের উপাদানগুলিকে পরিমাণমতো করতে পারি:

result = round(input * s)

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

যুক্তি:

  • সুযোগ: একটি স্কোপ অবজেক্ট
  • মিনি_রেঞ্জ: ইনপুটটির জন্য সম্ভবত উত্পাদিত সর্বনিম্ন স্কেলারের মান r
  • সর্বাধিক_আরঞ্জ: সর্বাধিক স্কেলারের মান সম্ভবত ইনপুটটির জন্য উত্পাদিত হয়।

রিটার্নস:

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

স্ট্রাক্টস

টেনসরফ্লো :: অপ্স :: কোয়ান্টিজভি 2 :: অ্যাটারস

কোয়ান্টিজভি 2 এর জন্য .চ্ছিক অ্যাট্রিবিউট সেটটার

জনসাধারণের গুণাবলী

অপারেশন

Operation operation

আউটপুট

::tensorflow::Output output

আউটপুট_ম্যাক্স

::tensorflow::Output output_max

আউটপুট_মিনি

::tensorflow::Output output_min

পাবলিক ফাংশন

কোয়ান্টিজভি 2

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

কোয়ান্টিজভি 2

 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
)