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

1. ভূমিকা

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

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

আপনি কি শিখবেন

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

বিশেষভাবে:

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

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

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

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

2. TensorFlow.js কি?

1aee0ede85885520.png

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

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

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

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

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

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

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

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

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

গোপনীয়তা

আপনি 3য় পক্ষের ওয়েব সার্ভারে কখনও ডেটা না পাঠিয়ে ক্লায়েন্ট মেশিনে ডেটা প্রশিক্ষণ এবং শ্রেণিবদ্ধ করতে পারেন। এমন কিছু সময় থাকতে পারে যেখানে স্থানীয় আইন মেনে চলার জন্য এটির প্রয়োজন হতে পারে, যেমন 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 Raspberry Pi এর মত জনপ্রিয় একক বোর্ড কম্পিউটারে সমর্থিত, যার মানে হল আপনি এই ধরনের ডিভাইসেও TensorFlow.js মডেলগুলি চালাতে পারেন।

গতি

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

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

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

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

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

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

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

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

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

sudo apt update
sudo apt-get install python3

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

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

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

python3 --version

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

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

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

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

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

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

pip3 --version

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

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

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

pip3 install -U setuptools

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

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

pip3 install tensorflow

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

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

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

nano test.py

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

test.py:

import tensorflow as tf
print(tf.__version__)

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

এখন আমরা এই পাইথন ফাইলটি চালাতে পারি টেনসরফ্লো-এর সংস্করণটি স্ক্রীনে মুদ্রিত দেখতে:

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

python3 test.py

লেখার সময় আমরা টেনসরফ্লো পাইথনের ইনস্টল করা সংস্করণের জন্য কনসোলে 2.3.1 মুদ্রিত দেখতে পাই।

4. একটি পাইথন মডেল তৈরি করা

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

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

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
  • saved_model.pb
  • সম্পদ
  • ভেরিয়েবল

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

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

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

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

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

pip3 install tensorflowjs

যে সহজ ছিল.

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

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

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

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

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

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

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

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

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

  • model.json
  • Group1-shard1of1.bin

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

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

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

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

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

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

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

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

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

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

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

script.js:

// 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 নোড সহ একটি ঘন স্তর দিয়ে তৈরি করেছি।

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

7. মডেল যে রূপান্তর না

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

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

5df94fc652393e00.png

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

কি করতে হবে?

আপনার কাছে দুটি বিকল্প আছে।

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

8. অভিনন্দন

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

রিক্যাপ

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

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

এরপর কি?

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

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

চেক আউট ওয়েবসাইট