TensorFlow RNN রূপান্তর TensorFlow Lite এ

ওভারভিউ

TensorFlow Lite TensorFlow RNN মডেলকে TensorFlow Lite-এর ফিউজড LSTM অপারেশনে রূপান্তর করতে সমর্থন করে। মিশ্রিত ক্রিয়াকলাপগুলি তাদের অন্তর্নিহিত কার্নেল বাস্তবায়নের কর্মক্ষমতা সর্বাধিক করার জন্য বিদ্যমান, সেইসাথে কোয়ান্টাইজেশনের মতো জটিল রূপান্তরগুলিকে সংজ্ঞায়িত করার জন্য একটি উচ্চ স্তরের ইন্টারফেস প্রদান করে।

যেহেতু টেনসরফ্লোতে RNN API-এর অনেকগুলি রূপ রয়েছে, তাই আমাদের দৃষ্টিভঙ্গি দ্বিগুণ হয়েছে:

  1. কেরাস LSTM-এর মতো স্ট্যান্ডার্ড TensorFlow RNN API-এর জন্য নেটিভ সমর্থন প্রদান করুন। এই সুপারিশ করা বিকল্প নেই।
  2. প্লাগ ইন করতে এবং টেনসরফ্লো লাইটে রূপান্তরিত করার জন্য ব্যবহারকারী-সংজ্ঞায়িত RNN বাস্তবায়নের জন্য রূপান্তর পরিকাঠামোতে একটি ইন্টারফেস প্রদান করুন। আমরা lingvo এর LSTMCellSimple এবং LayerNormalizedLSTMCellSimple RNN ইন্টারফেস ব্যবহার করে এই ধরনের রূপান্তরের কয়েকটি আউট অফ বক্স উদাহরণ প্রদান করি।

কনভার্টার API

বৈশিষ্ট্যটি টেনসরফ্লো 2.3 রিলিজের অংশ। এটি টিএফ-নাইটলি পিপ বা মাথা থেকেও পাওয়া যায়।

সংরক্ষিত মডেলের মাধ্যমে বা সরাসরি কেরাস মডেল থেকে টেনসরফ্লো লাইটে রূপান্তর করার সময় এই রূপান্তর কার্যকারিতা উপলব্ধ। উদাহরণ ব্যবহার দেখুন.

সংরক্ষিত মডেল থেকে

# build a saved model. Here concrete_function is the exported function
# corresponding to the TensorFlow model containing one or more
# Keras LSTM layers.
saved_model, saved_model_dir = build_saved_model_lstm(...)
saved_model.save(saved_model_dir, save_format="tf", signatures=concrete_func)

# Convert the model.
converter = TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()

কেরাস মডেল থেকে

# build a Keras model
keras_model = build_keras_lstm(...)

# Convert the model.
converter = TFLiteConverter.from_keras_model(keras_model)
tflite_model = converter.convert()

উদাহরণ

Keras LSTM থেকে TensorFlow Lite Colab পর্যন্ত TensorFlow Lite ইন্টারপ্রেটারের মাধ্যমে শেষ থেকে শেষ পর্যন্ত ব্যবহার করা হয়েছে।

TensorFlow RNNs API সমর্থিত

আমরা কেরাস LSTM-কে TensorFlow Lite-এ রূপান্তর করাকে সমর্থন করি। এটি কিভাবে কাজ করে তার বিস্তারিত জানার জন্য অনুগ্রহ করে কেরাস LSTM ইন্টারফেস দেখুন এবং এখানে রূপান্তর যুক্তিতে।

কেরাস অপারেশন সংজ্ঞা সাপেক্ষে টেনসরফ্লো লাইটের LSTM চুক্তি হাইলাইট করাও গুরুত্বপূর্ণ:

  1. ইনপুট টেনসরের মাত্রা 0 হল ব্যাচের আকার।
  2. recurrent_weight tensor এর মাত্রা 0 হল আউটপুট সংখ্যা।
  3. ওজন এবং recurrent_kernel tensors transposed হয়.
  4. ট্রান্সপোজড ওয়েট, ট্রান্সপোজড রিকারেন্ট_কারনেল এবং বায়াস টেনসরগুলি 0 ডাইমেনশন বরাবর 4টি সমান আকারের টেনসরে বিভক্ত। এগুলি ইনপুট গেট, ভুলে গেট, সেল এবং আউটপুট গেটের সাথে মিলে যায়।

Keras LSTM ভেরিয়েন্ট

সময় প্রধান

ব্যবহারকারীরা টাইম-মেজর বা টাইম-মেজর না বেছে নিতে পারেন। Keras LSTM ফাংশন def বৈশিষ্ট্যগুলিতে একটি সময়-প্রধান বৈশিষ্ট্য যোগ করে। ইউনিডাইরেশনাল সিকোয়েন্স LSTM-এর জন্য, আমরা unidirecional_sequence_lstm-এর সময় প্রধান অ্যাট্রিবিউটে ম্যাপ করতে পারি।

দ্বিমুখী LSTM

দ্বিমুখী LSTM দুটি Keras LSTM স্তরের সাথে প্রয়োগ করা যেতে পারে, একটি ফরোয়ার্ডের জন্য এবং একটি পিছনের জন্য, এখানে উদাহরণ দেখুন। একবার আমরা go_backward বৈশিষ্ট্যটি দেখতে পেলে, আমরা এটিকে পশ্চাৎপদ LSTM হিসাবে চিনতে পারি, তারপরে আমরা এগিয়ে এবং পিছনের দিকের LSTM একসাথে করি। এটি ভবিষ্যতের কাজ। বর্তমানে, এটি TensorFlow Lite মডেলে দুটি UnidirectionalSequenceLSTM অপারেশন তৈরি করে।

ব্যবহারকারী-সংজ্ঞায়িত LSTM রূপান্তর উদাহরণ

TensorFlow Lite ব্যবহারকারীর সংজ্ঞায়িত LSTM বাস্তবায়ন রূপান্তর করার একটি উপায়ও প্রদান করে। এখানে আমরা Lingvo এর LSTM ব্যবহার করি কিভাবে এটি বাস্তবায়ন করা যায় তার উদাহরণ হিসেবে। বিস্তারিত জানার জন্য অনুগ্রহ করে এখানে lingvo.LSTMCellSimple ইন্টারফেস এবং রূপান্তর যুক্তি দেখুন। এছাড়াও আমরা এখানে lingvo.LayerNormalizedLSTMCellSimple ইন্টারফেস এবং এর রূপান্তর যুক্তিতে Lingvo-এর LSTM সংজ্ঞাগুলির একটি উদাহরণ প্রদান করি।

টেনসরফ্লো লাইটে "আপনার নিজস্ব টেনসরফ্লো আরএনএন আনুন"

যদি একজন ব্যবহারকারীর RNN ইন্টারফেস স্ট্যান্ডার্ড সমর্থিত ইন্টারফেস থেকে আলাদা হয়, তবে কয়েকটি বিকল্প রয়েছে:

বিকল্প 1: কেরাস আরএনএন ইন্টারফেসে RNN ইন্টারফেসকে মানিয়ে নিতে TensorFlow পাইথনে অ্যাডাপ্টার কোড লিখুন। এর মানে জেনারেট করা RNN ইন্টারফেসের ফাংশনে tf_implements টীকা সহ একটি tf.function যা কেরাস LSTM স্তর দ্বারা উত্পন্ন একের সাথে অভিন্ন। এর পরে, Keras LSTM এর জন্য ব্যবহৃত একই রূপান্তর API কাজ করবে।

বিকল্প 2: যদি উপরেরটি সম্ভব না হয় (যেমন কেরাস LSTM-এর কিছু কার্যকারিতা অনুপস্থিত থাকে যা বর্তমানে TensorFlow Lite-এর ফিউজড LSTM op like লেয়ার নরমালাইজেশন দ্বারা উন্মুক্ত করা হয়েছে), তাহলে কাস্টম রূপান্তর কোড লিখে TensorFlow Lite কনভার্টারকে প্রসারিত করুন এবং এটিকে প্রস্তুতে প্লাগ করুন। এখানে কম্পোজিট-ফাংশন MLIR-পাস। ফাংশনের ইন্টারফেসটিকে একটি API চুক্তির মতো বিবেচনা করা উচিত এবং এতে ফিউজড TensorFlow Lite LSTM অপারেশনগুলিতে রূপান্তর করার জন্য প্রয়োজনীয় আর্গুমেন্ট থাকা উচিত - যেমন ইনপুট, পক্ষপাত, ওজন, প্রক্ষেপণ, স্তর স্বাভাবিককরণ, ইত্যাদি পরিচিত র‌্যাঙ্কের ফাংশন (যেমন MLIR-এ RankedTensorType)। এটি রূপান্তর কোড লেখার কাজটিকে আরও সহজ করে তোলে যা এই টেনসরগুলিকে RankedTensorType হিসাবে ধরে নিতে পারে এবং ফিউজড টেনসরফ্লো লাইট অপারেটরের অপারেন্ডগুলির সাথে সম্পর্কিত র‌্যাঙ্কড টেনসরগুলিতে রূপান্তর করতে সহায়তা করে৷

এই ধরনের রূপান্তর প্রবাহের একটি সম্পূর্ণ উদাহরণ হল Lingvo-এর LSTMCellSimple থেকে TensorFlow Lite রূপান্তর।

লিংভোতে LSTMCellSimple এখানে সংজ্ঞায়িত করা হয়েছে। এই LSTM সেল দিয়ে প্রশিক্ষিত মডেলগুলিকে নিম্নরূপ টেনসরফ্লো লাইটে রূপান্তর করা যেতে পারে:

  1. LSTMCellSimple-এর সমস্ত ব্যবহারকে একটি tf.function-এ একটি tf_implements টীকা দিয়ে লেবেল করুন (যেমন lingvo.LSTMCellSimple এখানে একটি ভাল টীকা নাম হবে)। নিশ্চিত করুন যে tf.function তৈরি হয়েছে সেটি রূপান্তর কোডে প্রত্যাশিত ফাংশনের ইন্টারফেসের সাথে মেলে। এটি মডেল লেখকের মধ্যে একটি চুক্তি যা টীকা এবং রূপান্তর কোড যোগ করে।
  2. TensorFlow Lite ফিউজড LSTM op রূপান্তরের জন্য একটি কাস্টম কম্পোজিট অপ-এ প্লাগ-ইন করতে প্রস্তুতি-কম্পোজিট-ফাংশন পাস প্রসারিত করুন। LSTMCell সরল রূপান্তর কোড দেখুন।

    রূপান্তর চুক্তি:

  3. ওজন এবং অভিক্ষেপ টেনসর স্থানান্তরিত হয়।

  4. ট্রান্সপোজড ওয়েট টেনসর স্লাইস করে {ইনপুট, রিকারেন্ট} থেকে {সেল, ইনপুট গেট, ভুলে গেট, আউটপুট গেট} বের করা হয়।

  5. {বায়াস} থেকে {সেল, ইনপুট গেট, ভুলে গেট, আউটপুট গেট} বায়াস টেনসরকে স্লাইস করে বের করা হয়।

  6. ট্রান্সপোজড প্রজেকশন টেনসর স্লাইস করে প্রজেকশন বের করা হয়।

  7. অনুরূপ রূপান্তর LayerNormalizedLSTMCellSimple- এর জন্য লেখা হয়েছে।

  8. TensorFlow Lite রূপান্তর অবকাঠামোর অবশিষ্টাংশ, সংজ্ঞায়িত সমস্ত MLIR পাস সহ টেনসরফ্লো লাইট ফ্ল্যাটবাফারে চূড়ান্ত রপ্তানি পুনরায় ব্যবহার করা যেতে পারে।

পরিচিত সমস্যা/সীমাবদ্ধতা

  1. বর্তমানে শুধুমাত্র স্টেটলেস কেরাস এলএসটিএম (কেরাসে ডিফল্ট আচরণ) রূপান্তরের জন্য সমর্থন রয়েছে। স্টেটফুল কেরাস এলএসটিএম রূপান্তর ভবিষ্যতের কাজ।
  2. অন্তর্নিহিত স্টেটলেস কেরাস LSTM লেয়ার ব্যবহার করে একটি স্টেটফুল কেরাস LSTM লেয়ার মডেল করা এবং ইউজার প্রোগ্রামে স্টেটকে স্পষ্টভাবে পরিচালনা করা এখনও সম্ভব। এই ধরনের একটি TensorFlow প্রোগ্রাম এখনও এখানে বর্ণিত বৈশিষ্ট্য ব্যবহার করে TensorFlow Lite এ রূপান্তরিত করা যেতে পারে।
  3. দ্বিমুখী LSTM বর্তমানে TensorFlow Lite-এ দুটি UnidirectionalSequenceLSTM অপারেশন হিসেবে মডেল করা হয়েছে। এটি একটি একক BidirectionalSequenceLSTM op দিয়ে প্রতিস্থাপিত হবে।