TensorFlow.js: একটি Python SavedModel কে TensorFlow.js ফরম্যাটে রূপান্তর করুন

1. ভূমিকা

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

TensorFlow.js টিম একটি কমান্ড লাইন কনভার্টারের মাধ্যমে SavedModel ফর্ম্যাটের মডেলগুলিকে TensorFlow.js-এ রূপান্তর করার জন্য একটি সুবিধাজনক টুল তৈরি করেছে যাতে আপনি ওয়েবের নাগাল এবং স্কেল সহ এই ধরনের মডেলগুলি ব্যবহার করে উপভোগ করতে পারেন।

তুমি কি শিখবে

এই কোড ল্যাবে আপনি শিখবেন কিভাবে TensorFlow.js কমান্ড লাইন কনভার্টার ব্যবহার করে একটি Python জেনারেটেড SavedModel কে ওয়েব ব্রাউজারে ক্লায়েন্ট সাইডে কার্যকর করার জন্য প্রয়োজনীয় model.json ফর্ম্যাটে পোর্ট করতে হয়।

বিশেষ করে:

  • কিভাবে একটি সহজ পাইথন এমএল মডেল তৈরি করবেন এবং এটি TensorFlow.js কনভার্টারের প্রয়োজনীয় ফর্ম্যাটে সংরক্ষণ করবেন।
  • পাইথন থেকে এক্সপোর্ট করা SavedModel-এ TensorFlow.js কনভার্টারটি কীভাবে ইনস্টল এবং ব্যবহার করবেন।
  • রূপান্তর থেকে প্রাপ্ত ফাইলগুলি নিন এবং আপনার JS ওয়েব অ্যাপ্লিকেশনে ব্যবহার করুন।
  • কিছু ভুল হলে কী করতে হবে (সব মডেল রূপান্তরিত হবে না) এবং আপনার কাছে কী বিকল্প আছে তা বুঝুন।

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

আপনি যা রূপান্তর করেন তা আমাদের সাথে শেয়ার করুন!

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

২. TensorFlow.js কি?

1aee0ede85885520.png সম্পর্কে

TensorFlow.js হল একটি ওপেন সোর্স মেশিন লার্নিং লাইব্রেরি যা জাভাস্ক্রিপ্টের যেকোনো জায়াস্ক্রিপ্ট ব্যবহার করতে পারে। এটি পাইথনে লেখা মূল TensorFlow লাইব্রেরির উপর ভিত্তি করে তৈরি এবং জাভাস্ক্রিপ্ট ইকোসিস্টেমের জন্য এই ডেভেলপার অভিজ্ঞতা এবং API-এর সেট পুনরায় তৈরি করার লক্ষ্যে কাজ করে।

এটা কোথায় ব্যবহার করা যেতে পারে?

জাভাস্ক্রিপ্টের পোর্টেবিলিটির কারণে, আপনি এখন একটি ভাষায় লিখতে পারেন এবং নিম্নলিখিত সমস্ত প্ল্যাটফর্মে সহজেই মেশিন লার্নিং সম্পাদন করতে পারেন:

  • ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে ওয়েব ব্রাউজারে ক্লায়েন্ট সাইড
  • সার্ভার সাইড এবং এমনকি রাস্পবেরি পাই এর মতো IoT ডিভাইসগুলি Node.js ব্যবহার করে
  • ইলেক্ট্রন ব্যবহার করে ডেস্কটপ অ্যাপ
  • রিঅ্যাক্ট নেটিভ ব্যবহার করে নেটিভ মোবাইল অ্যাপস

TensorFlow.js এই পরিবেশগুলির প্রতিটির মধ্যে একাধিক ব্যাকএন্ড সমর্থন করে (যেমন CPU বা WebGL এর মতো প্রকৃত হার্ডওয়্যার ভিত্তিক পরিবেশ। এই প্রসঙ্গে "ব্যাকএন্ড" মানে সার্ভার সাইড পরিবেশ নয় - উদাহরণস্বরূপ WebGL-এ এক্সিকিউশনের জন্য ব্যাকএন্ড ক্লায়েন্ট সাইড হতে পারে) যাতে সামঞ্জস্যতা নিশ্চিত করা যায় এবং জিনিসগুলি দ্রুত চলমান থাকে। বর্তমানে TensorFlow.js সমর্থন করে:

  • ডিভাইসের গ্রাফিক্স কার্ডে (GPU)-তে WebGL এক্সিকিউশন - এটি GPU অ্যাক্সিলারেশন সহ বৃহত্তর মডেলগুলি (3MB-এর বেশি আকারের) এক্সিকিউশন করার দ্রুততম উপায়।
  • CPU-তে ওয়েব অ্যাসেম্বলি (WASM) কার্যকর করা - উদাহরণস্বরূপ, পুরোনো প্রজন্মের মোবাইল ফোন সহ সমস্ত ডিভাইসে CPU কর্মক্ষমতা উন্নত করার জন্য। এটি ছোট মডেলগুলির (3MB এর কম আকারের) জন্য আরও উপযুক্ত, যা আসলে WebGL-এর তুলনায় WASM-এর মাধ্যমে CPU-তে দ্রুত কার্যকর হতে পারে কারণ গ্রাফিক্স প্রসেসরে সামগ্রী আপলোড করার জন্য অতিরিক্ত খরচ হয়।
  • CPU এক্সিকিউশন - অন্য কোনও পরিবেশ উপলব্ধ না থাকলে ফলব্যাক। এটি তিনটির মধ্যে সবচেয়ে ধীর কিন্তু সর্বদা আপনার জন্য রয়েছে।

দ্রষ্টব্য: আপনি যদি জানেন যে আপনি কোন ডিভাইসে কাজ করবেন, তাহলে আপনি এই ব্যাকএন্ডগুলির মধ্যে একটিকে জোর করে ব্যবহার করতে পারেন, অথবা যদি আপনি এটি নির্দিষ্ট না করেন তবে TensorFlow.js কে আপনার জন্য সিদ্ধান্ত নিতে দিতে পারেন।

ক্লায়েন্ট সাইড সুপার পাওয়ার

ক্লায়েন্ট মেশিনে ওয়েব ব্রাউজারে TensorFlow.js চালানোর ফলে বেশ কিছু সুবিধা পাওয়া যেতে পারে যা বিবেচনা করার মতো।

গোপনীয়তা

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

গতি

যেহেতু আপনাকে কোনও রিমোট সার্ভারে ডেটা পাঠাতে হবে না, তাই অনুমান (ডেটা শ্রেণীবদ্ধ করার কাজ) দ্রুততর হতে পারে। আরও ভালো, ব্যবহারকারী যদি আপনাকে অ্যাক্সেস দেয় তবে আপনি ডিভাইসের সেন্সর যেমন ক্যামেরা, মাইক্রোফোন, জিপিএস, অ্যাক্সিলোমিটার এবং আরও অনেক কিছুতে সরাসরি অ্যাক্সেস পাবেন।

নাগাল এবং স্কেল

এক ক্লিকেই বিশ্বের যে কেউ আপনার পাঠানো লিঙ্কে ক্লিক করতে পারবে, তাদের ব্রাউজারে ওয়েব পৃষ্ঠা খুলতে পারবে এবং আপনার তৈরি জিনিস ব্যবহার করতে পারবে। CUDA ড্রাইভার সহ জটিল সার্ভার সাইড লিনাক্স সেটআপের প্রয়োজন নেই এবং আরও অনেক কিছুর প্রয়োজন নেই শুধুমাত্র মেশিন লার্নিং সিস্টেম ব্যবহার করার জন্য।

খরচ

কোনও সার্ভার না থাকার অর্থ হল আপনার HTML, CSS, JS এবং মডেল ফাইলগুলি হোস্ট করার জন্য আপনাকে কেবলমাত্র একটি CDN এর জন্য অর্থ প্রদান করতে হবে। একটি CDN এর খরচ একটি সার্ভার (সম্ভবত গ্রাফিক্স কার্ড সংযুক্ত) 24/7 চালু রাখার চেয়ে অনেক সস্তা।

সার্ভার সাইড বৈশিষ্ট্য

TensorFlow.js এর Node.js বাস্তবায়নের সুবিধা গ্রহণ করলে নিম্নলিখিত বৈশিষ্ট্যগুলি সক্ষম হয়।

সম্পূর্ণ CUDA সমর্থন

সার্ভারের দিকে, গ্রাফিক্স কার্ড ত্বরণের জন্য, আপনাকে অবশ্যই NVIDIA CUDA ড্রাইভার ইনস্টল করতে হবে যাতে TensorFlow গ্রাফিক্স কার্ডের সাথে কাজ করতে পারে (WebGL ব্যবহার করে এমন ব্রাউজারে ভিন্ন - কোনও ইনস্টলেশনের প্রয়োজন নেই)। তবে সম্পূর্ণ CUDA সমর্থনের মাধ্যমে আপনি গ্রাফিক্স কার্ডের নিম্ন স্তরের ক্ষমতাগুলি সম্পূর্ণরূপে ব্যবহার করতে পারেন, যার ফলে দ্রুত প্রশিক্ষণ এবং অনুমানের সময় আসে। পারফরম্যান্স Python TensorFlow বাস্তবায়নের সাথে সমান কারণ উভয়ই একই C++ ব্যাকএন্ড ভাগ করে।

মডেলের আকার

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

আইওটি

Node.js রাস্পবেরি পাই এর মতো জনপ্রিয় সিঙ্গেল বোর্ড কম্পিউটারগুলিতে সমর্থিত, যার অর্থ আপনি এই জাতীয় ডিভাইসগুলিতেও TensorFlow.js মডেলগুলি কার্যকর করতে পারেন।

গতি

Node.js জাভাস্ক্রিপ্টে লেখা, যার অর্থ এটি ঠিক সময়ে সংকলন করলে উপকৃত হয়। এর অর্থ হল Node.js ব্যবহার করার সময় আপনি প্রায়শই কর্মক্ষমতা বৃদ্ধি দেখতে পাবেন কারণ এটি রানটাইমে অপ্টিমাইজ করা হবে, বিশেষ করে আপনার করা যেকোনো প্রিপ্রসেসিংয়ের ক্ষেত্রে। এর একটি দুর্দান্ত উদাহরণ এই কেস স্টাডিতে দেখা যাবে যেখানে দেখানো হয়েছে যে Hugging Face কীভাবে Node.js ব্যবহার করে তাদের প্রাকৃতিক ভাষা প্রক্রিয়াকরণ মডেলের জন্য 2x কর্মক্ষমতা বৃদ্ধি করেছে।

এখন আপনি TensorFlow.js এর মূল বিষয়গুলি, এটি কোথায় চালানো যেতে পারে এবং কিছু সুবিধা সম্পর্কে বুঝতে পেরেছেন, আসুন এটি দিয়ে দরকারী জিনিসগুলি করা শুরু করি!

৩. আপনার সিস্টেম সেট আপ করা

এই টিউটোরিয়ালের জন্য আমরা উবুন্টু ব্যবহার করব - একটি জনপ্রিয় লিনাক্স ডিস্ট্রিবিউশন যা অনেকেই ব্যবহার করেন এবং যদি আপনি ক্লাউড ভিত্তিক ভার্চুয়াল মেশিনে অনুসরণ করতে চান তবে এটি গুগল ক্লাউড কম্পিউট ইঞ্জিনে বেস ইমেজ হিসেবে উপলব্ধ।

লেখার সময় আমরা একটি নতুন ভ্যানিলা কম্পিউট ইঞ্জিন ইনস্ট্যান্স তৈরি করার সময় উবুন্টু 18.04.4 LTS এর ছবি নির্বাচন করতে পারি যা আমরা ব্যবহার করব। অবশ্যই আপনি আপনার নিজস্ব মেশিন ব্যবহার করতে পারেন, অথবা যদি আপনি এটি করতে চান তবে একটি ভিন্ন অপারেটিং সিস্টেমও ব্যবহার করতে পারেন, তবে ইনস্টলেশন নির্দেশাবলী এবং নির্ভরতা সিস্টেমের মধ্যে ভিন্ন হতে পারে।

টেনসরফ্লো ইনস্টল করা হচ্ছে (পাইথন সংস্করণ)

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

আপনার উপরে তৈরি ক্লাউড মেশিনে SSH লিখুন এবং তারপর টার্মিনাল উইন্ডোতে নিম্নলিখিতটি টাইপ করুন:

টার্মিনাল উইন্ডো:

sudo apt update
sudo apt-get install python3

এটি নিশ্চিত করবে যে আমাদের মেশিনে পাইথন 3 ইনস্টল করা আছে। টেনসরফ্লো ব্যবহার করার জন্য পাইথন 3.4 বা তার উচ্চতর সংস্করণ ইনস্টল করা আবশ্যক।

সঠিক সংস্করণ ইনস্টল করা আছে কিনা তা যাচাই করতে, নিম্নলিখিতটি টাইপ করুন:

টার্মিনাল উইন্ডো:

python3 --version

আপনি কিছু আউটপুট দেখতে পাবেন যেখানে ভার্সন নম্বর দেখানো হবে যেমন Python 3.6.9 । যদি আপনি এটি সঠিকভাবে মুদ্রিত দেখেন এবং এটি 3.4 এর চেয়ে বেশি হয় তবে আমরা চালিয়ে যেতে প্রস্তুত।

এরপর আমরা Python 3 এর জন্য PIP ইনস্টল করব যা Python এর প্যাকেজ ম্যানেজার এবং তারপর এটি আপডেট করব। টাইপ করুন:

টার্মিনাল উইন্ডো:

sudo apt install python3-pip
pip3 install --upgrade pip

আবার আমরা pip3 ইনস্টলেশন যাচাই করতে পারি:

টার্মিনাল উইন্ডো:

pip3 --version

লেখার সময় আমরা দেখতে পাই যে এই কমান্ডটি কার্যকর করার পরে টার্মিনালে pip 20.2.3 প্রিন্ট করা হয়েছে।

TensorFlow ইনস্টল করার আগে, Python প্যাকেজ "setuptools" এর সংস্করণ 41.0.0 বা তার বেশি হতে হবে। এটি সর্বশেষ সংস্করণে আপডেট হয়েছে কিনা তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি চালান:

টার্মিনাল উইন্ডো:

pip3 install -U setuptools

অবশেষে, আমরা এখন পাইথনের জন্য TensorFlow ইনস্টল করতে পারি:

টার্মিনাল উইন্ডো:

pip3 install tensorflow

এটি সম্পূর্ণ হতে কিছু সময় লাগতে পারে তাই এটি কার্যকর করা শেষ না হওয়া পর্যন্ত অপেক্ষা করুন।

TensorFlow সঠিকভাবে ইনস্টল করা আছে কিনা তা পরীক্ষা করে দেখা যাক। আপনার বর্তমান ডিরেক্টরিতে test.py নামে একটি পাইথন ফাইল তৈরি করুন:

টার্মিনাল উইন্ডো:

nano test.py

ন্যানো ওপেন হলে আমরা ইনস্টল করা TensorFlow সংস্করণটি প্রিন্ট করার জন্য কিছু পাইথন কোড লিখতে পারি:

টেস্ট.পিআই:

import tensorflow as tf
print(tf.__version__)

ডিস্কে পরিবর্তনগুলি লিখতে CTRL + O টিপুন এবং তারপর ন্যানো এডিটর থেকে বেরিয়ে আসতে CTRL + X টিপুন।

এখন আমরা এই পাইথন ফাইলটি চালাতে পারি যাতে TensorFlow এর সংস্করণটি স্ক্রিনে প্রিন্ট করা হয়:

টার্মিনাল উইন্ডো:

python3 test.py

লেখার সময় আমরা দেখতে পাচ্ছি যে আমাদের TensorFlow Python সংস্করণের কনসোলে 2.3.1 প্রিন্ট করা হয়েছে।

৪. পাইথন মডেল তৈরি করা

এই কোডল্যাবের পরবর্তী ধাপে একটি সহজ পাইথন মডেল তৈরি করা হবে যেখানে দেখানো হবে কিভাবে আমরা এই প্রশিক্ষিত মডেলটিকে "SavedModel" ফর্ম্যাটে সংরক্ষণ করতে পারি এবং তারপর আমাদের TensorFlow.js কমান্ড লাইন কনভার্টারে ব্যবহার করতে পারি। নীতিটি আপনি যে কোনও পাইথন মডেলকে রূপান্তর করার চেষ্টা করছেন তার জন্য একই রকম হবে, তবে আমরা এই কোডটি সহজ রাখব যাতে সবাই বুঝতে পারে।

প্রথম বিভাগে তৈরি আমাদের test.py ফাইলটি সম্পাদনা করা যাক এবং কোডটি নিম্নরূপ আপডেট করা যাক:

টেস্ট.পিআই:

import tensorflow as tf
print(tf.__version__)

# Import NumPy - package for working with arrays in Python.
import numpy as np

# Import useful keras functions - this is similar to the
# TensorFlow.js Layers API functionality.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

# Create a new dense layer with 1 unit, and input shape of [1].
layer0 = Dense(units=1, input_shape=[1])
model = Sequential([layer0])

# Compile the model using stochastic gradient descent as optimiser
# and the mean squared error loss function.
model.compile(optimizer='sgd', loss='mean_absolute_error')

# Provide some training data! Here we are using some fictional data 
# for house square footage and house price (which is simply 1000x the 
# square footage) which our model must learn for itself.
xs = np.array([800.0, 850.0, 900.0, 950.0, 980.0, 1000.0, 1050.0, 1075.0, 1100.0, 1150.0, 1200.0, 1250.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0], dtype=float)

ys = np.array([800000.0, 850000.0, 900000.0, 950000.0, 980000.0, 1000000.0, 1050000.0, 1075000.0, 1100000.0, 1150000.0, 1200000.0,  1250000.0, 1300000.0, 1400000.0, 1500000.0, 1600000.0, 1700000.0, 1800000.0, 1900000.0, 2000000.0], dtype=float)

# Train the model for 500 epochs.
model.fit(xs, ys, epochs=500, verbose=0)

# Test the trained model on a test input value
print(model.predict([1200.0]))

# Save the model we just trained to the "SavedModel" format to the
# same directory our test.py file is located.
tf.saved_model.save(model, './')

এই কোডটি আমাদের প্রদত্ত x (ইনপুট) এবং y (আউটপুট) এর মধ্যে সম্পর্ক অনুমান করতে শেখার জন্য একটি খুব সহজ রৈখিক রিগ্রেশন প্রশিক্ষণ দেবে। এরপর আমরা প্রাপ্ত প্রশিক্ষিত মডেলটি ডিস্কে সংরক্ষণ করব। প্রতিটি লাইন কী করে সে সম্পর্কে আরও বিস্তারিত জানার জন্য ইনলাইন মন্তব্যগুলি দেখুন।

এই প্রোগ্রামটি চালানোর পর ( python3 test.py কল করে) যদি আমরা আমাদের ডিরেক্টরিটি পরীক্ষা করি, তাহলে আমাদের বর্তমান ডিরেক্টরিতে কিছু নতুন ফাইল এবং ফোল্ডার তৈরি হতে দেখা যাবে:

  • test.py সম্পর্কে
  • সংরক্ষিত_মডেল.পিবি
  • সম্পদ
  • ভেরিয়েবল

আমরা এখন TensorFlow.js কনভার্টারে ব্যবহার করার জন্য প্রয়োজনীয় ফাইলগুলি তৈরি করেছি যাতে এই মডেলটি ব্রাউজারে চালানো যায়!

৫. SavedModel কে TensorFlow.js ফর্ম্যাটে রূপান্তর করা

TensorFlow.js কনভার্টার ইনস্টল করুন

কনভার্টারটি ইনস্টল করতে, নিম্নলিখিত কমান্ডটি চালান:

টার্মিনাল উইন্ডো:

pip3 install tensorflowjs

এটা সহজ ছিল।

ধরে নিচ্ছি আমরা কমান্ড লাইন কনভার্টার ( tensorflowjs_converter ) ব্যবহার করছি এবং উপরে দেখানো উইজার্ড সংস্করণটি ব্যবহার করছি না, তাহলে আমরা নিম্নলিখিত কমান্ডটি কল করে আমাদের তৈরি করা সংরক্ষিত মডেলটি রূপান্তর করতে পারি এবং স্পষ্টভাবে প্যারামিটারগুলি কনভার্টারে প্রেরণ করতে পারি:

টার্মিনাল উইন্ডো:

tensorflowjs_converter \
    --input_format=keras_saved_model \
    ./ \
    ./predict_houses_tfjs

এখানে কী হচ্ছে? প্রথমে আমরা আমাদের ইনস্টল করা tensorflowjs_converter বাইনারিটি কল করছি এবং উল্লেখ করছি যে আমরা একটি keras সংরক্ষিত মডেল রূপান্তর করার চেষ্টা করছি।

উপরের আমাদের উদাহরণ কোডে আপনি লক্ষ্য করবেন যে আমরা keras আমদানি করেছি এবং আমাদের মডেল তৈরি করতে এর উচ্চ স্তরের স্তর API ব্যবহার করেছি। যদি আপনি আপনার Python কোডে keras ব্যবহার না করে থাকেন তবে আপনি একটি ভিন্ন ইনপুট ফর্ম্যাট ব্যবহার করতে চাইতে পারেন:

  • কেরাস - কেরাস ফরম্যাট লোড করতে (HDF5 ফাইল টাইপ)
  • tf_saved_model - কেরাসের পরিবর্তে টেনসরফ্লো কোর API ব্যবহার করে এমন মডেল লোড করতে।
  • tf_frozen_model - হিমায়িত ওজন ধারণকারী একটি মডেল লোড করতে।
  • tf_hub - টেনসরফ্লো হাব থেকে তৈরি একটি মডেল লোড করতে।

আপনি এই অন্যান্য ফর্ম্যাটগুলি সম্পর্কে এখানে আরও জানতে পারেন।

পরবর্তী দুটি প্যারামিটার সংরক্ষিত মডেলটি কোন ফোল্ডারে অবস্থিত তা নির্দিষ্ট করে - উপরের আমাদের ডেমোতে আমরা বর্তমান ডিরেক্টরিটি নির্দিষ্ট করি, এবং অবশেষে আমরা কোন ডিরেক্টরিতে আমাদের রূপান্তর আউটপুট করতে চাই তা নির্দিষ্ট করি, যা আমরা উপরে বর্তমান ডিরেক্টরিতে " predict_houses_tfjs " নামক একটি ফোল্ডার হিসাবে নির্দিষ্ট করি।

উপরের কমান্ডটি চালানোর ফলে বর্তমান ডিরেক্টরিতে predict_houses_tfjs নামে একটি নতুন ফোল্ডার তৈরি হয় যার মধ্যে রয়েছে :

  • মডেল.জেসন
  • গ্রুপ১-shard1of1.bin

ওয়েব ব্রাউজারে মডেলটি চালানোর জন্য আমাদের এই ফাইলগুলি প্রয়োজন। পরবর্তী বিভাগে আমরা এগুলি ব্যবহার করার জন্য এই ফাইলগুলি সংরক্ষণ করুন।

৬. ব্রাউজারে আমাদের রূপান্তরিত মডেল ব্যবহার করা

রূপান্তরিত ফাইলগুলি হোস্ট করুন

প্রথমে আমাদের model.json এবং *.bin ফাইলগুলি একটি ওয়েব সার্ভারে স্থাপন করতে হবে যাতে আমরা আমাদের ওয়েব পৃষ্ঠার মাধ্যমে সেগুলি অ্যাক্সেস করতে পারি। এই ডেমোর জন্য আমরা Glitch.com ব্যবহার করব যাতে আপনার পক্ষে এটি অনুসরণ করা সহজ হয়। তবে আপনি যদি ওয়েব ইঞ্জিনিয়ারিং ব্যাকগ্রাউন্ড থেকে থাকেন তবে আপনি এটি করার জন্য আপনার বর্তমান উবুন্টু সার্ভার ইনস্ট্যান্সে একটি সাধারণ HTTP সার্ভার চালু করতে পারেন। পছন্দটি আপনার।

গ্লিচে ফাইল আপলোড করা হচ্ছে

  1. Glitch.com- এ সাইন ইন করুন
  2. আমাদের বয়লারপ্লেট TensorFlow.js প্রকল্পটি ক্লোন করতে এই লিঙ্কটি ব্যবহার করুন। এতে একটি স্কেলেটন html, css, এবং js ফাইল রয়েছে যা আমাদের ব্যবহারের জন্য TensorFlow.js লাইব্রেরি আমদানি করে।
  3. বাম দিকের প্যানেলে "assets" ফোল্ডারে ক্লিক করুন।
  4. "upload an asset" এ ক্লিক করুন এবং এই ফোল্ডারে আপলোড করার জন্য group1-shard1of1.bin নির্বাচন করুন। আপলোড করার পরে এটি এখন এইরকম দেখাবে: 25a2251c7f165184.png সম্পর্কে
  5. আপনি যদি আপনার আপলোড করা group1-shard1of1.bin ফাইলটিতে ক্লিক করেন তবে আপনি URLটি তার অবস্থানে অনুলিপি করতে সক্ষম হবেন। দেখানো পথটি এখনই অনুলিপি করুন: 92ded8d46442c404.png সম্পর্কে
  6. এখন আপনার স্থানীয় মেশিনে আপনার পছন্দের টেক্সট এডিটর ব্যবহার করে model.json সম্পাদনা করুন এবং (CTRL+F ব্যবহার করে) group1-shard1of1.bin ফাইলটি অনুসন্ধান করুন যা এর মধ্যে কোথাও উল্লেখ করা হবে।

এই ফাইলের নামটি ধাপ ৫ থেকে কপি করা ইউআরএল দিয়ে প্রতিস্থাপন করুন, কিন্তু কপি করা পাথ থেকে যে গ্লিচ তৈরি হয় তার https://cdn.glitch.com/ নামটি মুছে ফেলুন।

সম্পাদনা করার পরে এটি দেখতে এরকম কিছু হওয়া উচিত (লক্ষ্য করুন কীভাবে লিডিং সার্ভার পাথটি সরানো হয়েছে যাতে শুধুমাত্র আপলোড করা ফাইলের নামটি রাখা হয়): d5a338f2dc1f31d4.png সম্পর্কে ৭. এখন এই সম্পাদিত model.json ফাইলটি সংরক্ষণ করুন এবং আপলোড করুন যাতে এটি গ্লিচ হয়ে যায়। assets-এ ক্লিক করে, তারপর "upload an asset" বোতামে ক্লিক করুন (গুরুত্বপূর্ণ) । যদি আপনি ফিজিক্যাল বোতামটি ব্যবহার না করেন এবং ড্র্যাগ অ্যান্ড ড্রপ করেন, তাহলে এটি CDN-এর পরিবর্তে একটি সম্পাদনাযোগ্য ফাইল হিসেবে আপলোড হবে যা একই ফোল্ডারে থাকবে না এবং TensorFlow.js যখন একটি নির্দিষ্ট মডেলের জন্য বাইনারি ফাইলগুলি ডাউনলোড করার চেষ্টা করে তখন আপেক্ষিক পথ ধরে নেওয়া হয়। যদি আপনি এটি সঠিকভাবে করে থাকেন তবে আপনি assets ফোল্ডারে এইভাবে ২টি ফাইল দেখতে পাবেন: 51a6dbd5d3097ffc.png সম্পর্কে

দারুন! আমরা এখন ব্রাউজারে কিছু আসল কোড সহ আমাদের সংরক্ষিত ফাইলগুলি ব্যবহার করতে প্রস্তুত।

মডেল লোড হচ্ছে

এখন যেহেতু আমরা আমাদের রূপান্তরিত ফাইলগুলি হোস্ট করেছি, আমরা এই ফাইলগুলি লোড করার জন্য একটি সহজ ওয়েবপৃষ্ঠা লিখতে পারি এবং সেগুলি ব্যবহার করে একটি পূর্বাভাস দিতে পারি। Glitch প্রজেক্ট ফোল্ডারে script.js খুলুন এবং Glitch-এ আপলোড করা model.json ফাইলের জন্য তৈরি Glitch.com লিঙ্কটি নির্দেশ করার জন্য const MODEL_URL পরিবর্তন করার পরে এই ফাইলের বিষয়বস্তুগুলি নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:

স্ক্রিপ্ট.জেএস:

// Grab a reference to our status text element on the web page.
// Initially we print out the loaded version of TFJS.
const status = document.getElementById('status');
status.innerText = 'Loaded TensorFlow.js - version: ' + tf.version.tfjs;

// Specify location of our Model.json file we uploaded to the Glitch.com CDN.
const MODEL_URL = YOUR MODEL.JSON URL HERE! CHANGE THIS!';
// Specify a test value we wish to use in our prediction.
// Here we use 950, so we expect the result to be close to 950,000.
const TEST_VALUE = 950.0

// Create an asynchronous function.
async function run() {
    // Load the model from the CDN.
    const model = await tf.loadLayersModel(MODEL_URL);

    // Print out the architecture of the loaded model.
    // This is useful to see that it matches what we built in Python.
    console.log(model.summary());

    // Create a 1 dimensional tensor with our test value.
    const input = tf.tensor1d([TEST_VALUE]);

    // Actually make the prediction.
    const result = model.predict(input);

    // Grab the result of prediction using dataSync method
    // which ensures we do this synchronously.
    status.innerText = 'Input of ' + TEST_VALUE + 
        'sqft predicted as $' + result.dataSync()[0];
}

// Call our function to start the prediction!
run();

আপনার model.json পাথের দিকে নির্দেশ করার জন্য MODEL_URL ধ্রুবক পরিবর্তন করার পরে উপরের কোডটি চালানোর ফলে নীচে দেখানো একটি আউটপুট পাওয়া যাবে।

c5e8457213058ec3.png সম্পর্কে

যদি আমরা ওয়েব ব্রাউজারের কনসোলটি পরীক্ষা করি (ব্রাউজারে ডেভেলপার টুল আনতে F12 টিপুন), তাহলে আমরা লোড করা মডেলের মডেলের বর্ণনাও দেখতে পাব যা প্রিন্ট করে:

35e79d70dbd66f27.png সম্পর্কে

এই কোডল্যাবের শুরুতে আমাদের পাইথন কোডের সাথে তুলনা করলে আমরা নিশ্চিত করতে পারি যে এটি একই নেটওয়ার্ক যা আমরা 1 ঘন ইনপুট এবং 1 নোড সহ একটি ঘন স্তর দিয়ে তৈরি করেছি।

অভিনন্দন! আপনি ওয়েব ব্রাউজারে একটি রূপান্তরিত পাইথন প্রশিক্ষিত মডেল চালালেন!

৭. যেসব মডেল রূপান্তরিত হয় না

এমন সময় আসবে যখন কম সাধারণ ক্রিয়াকলাপ ব্যবহার করার জন্য সংকলিত আরও জটিল মডেলগুলি রূপান্তরের জন্য সমর্থিত হবে না। TensorFlow.js এর ব্রাউজার ভিত্তিক সংস্করণটি TensorFlow এর সম্পূর্ণ পুনর্লিখন এবং তাই আমরা বর্তমানে TensorFlow C++ API-এর সমস্ত নিম্ন স্তরের অপশন সমর্থন করি না (এখানে 1000 টি আছে) - যদিও সময়ের সাথে সাথে আমরা বৃদ্ধি পাওয়ার সাথে সাথে এবং মূল অপশনগুলি আরও স্থিতিশীল হওয়ার সাথে সাথে আরও যুক্ত হচ্ছে।

লেখার সময়, TensorFlow Python-এ এমন একটি ফাংশন যা savedmodel হিসেবে রপ্তানি করার সময় একটি অসমর্থিত op তৈরি করে তা হল linalg.diag । যদি আমরা এমন একটি savedmodel রূপান্তর করার চেষ্টা করি যা Python-এ এটি ব্যবহার করে (যা এটি তৈরি করে এমন ফলাফলের ops সমর্থন করে), তাহলে আমরা নীচে দেখানো ত্রুটির মতো একটি ত্রুটি দেখতে পাব:

5df94fc652393e00.png সম্পর্কে

এখানে আমরা লাল রঙে হাইলাইট করা দেখতে পাচ্ছি যে linalg.diag কলটি MatrixDiagV3 নামে একটি অপশন তৈরি করতে কম্পাইল করা হয়েছে যা এই কোডল্যাব লেখার সময় ওয়েব ব্রাউজারে TensorFlow.js দ্বারা সমর্থিত নয়।

কি করো?

তোমার কাছে দুটি বিকল্প আছে।

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

৮. অভিনন্দন

অভিনন্দন, আপনি ওয়েব ব্রাউজারে TensorFlow.js এর মাধ্যমে একটি পাইথন মডেল ব্যবহারের প্রথম পদক্ষেপ নিয়েছেন!

সংক্ষিপ্তসার

এই কোড ল্যাবে আমরা শিখেছি কিভাবে:

  1. পাইথন ভিত্তিক টেনসরফ্লো ইনস্টল করার জন্য আমাদের লিনাক্স পরিবেশ সেট আপ করুন।
  2. একটি পাইথন 'SavedModel' রপ্তানি করুন
  3. TensorFlow.js কমান্ড লাইন কনভার্টার ইনস্টল করুন
  4. প্রয়োজনীয় ক্লায়েন্ট সাইড ফাইল তৈরি করতে TensorFlow.js কমান্ড লাইন কনভার্টার ব্যবহার করুন।
  5. জেনারেট করা ফাইলগুলি আসল ওয়েব অ্যাপ্লিকেশনে ব্যবহার করুন
  6. যেসব মডেল রূপান্তরিত হবে না এবং ভবিষ্যতে তাদের রূপান্তরিত করার জন্য কী কী বাস্তবায়ন করা প্রয়োজন তা চিহ্নিত করুন।

এরপর কী?

#MadeWithTFJS ব্যবহার করে আপনার তৈরি যেকোনো কিছুতে আমাদের ট্যাগ করতে ভুলবেন না যাতে আপনি সোশ্যাল মিডিয়ায় প্রদর্শিত হতে পারেন অথবা ভবিষ্যতের TensorFlow ইভেন্টগুলিতে প্রদর্শিত হতে পারেন। আপনি ব্রাউজারে কী রূপান্তর করেন এবং ক্লায়েন্ট সাইড ব্যবহার করেন তা আমরা দেখতে চাই!

আরও গভীরে যেতে আরও TensorFlow.js কোডল্যাব

দেখার জন্য ওয়েবসাইটগুলি