TensorFlow.js: স্কেলে মেশিন লার্নিং মডেল স্থাপন ও হোস্ট করতে Firebase হোস্টিং ব্যবহার করুন

১. ভূমিকা

সুতরাং আপনি TensorFlow.js দিয়ে একটি কাস্টম মেশিন লার্নিং মডেল তৈরি করেছেন, কিন্তু এখন আপনার পছন্দের কোনো ওয়েবসাইটে এটি ব্যবহার করার জন্য এটিকে কোথাও হোস্ট করতে হবে। এটি করার জন্য অনেক উপায় আছে, কিন্তু আজ আমরা দেখব Firebase Hosting ব্যবহার করা কতটা সহজ, যা আপনাকে ভার্সনিং, একটি সুরক্ষিত সংযোগের মাধ্যমে মডেল পরিবেশন করা এবং আরও অনেক অতিরিক্ত সুবিধাও দিতে পারে।

আপনি যা তৈরি করবেন

এই কোড ল্যাবে আপনি একটি সম্পূর্ণ এন্ড-টু-এন্ড সিস্টেম তৈরি করবেন, যা আপনার কাস্টম সেভ করা TensorFlow.js মডেলকে তার সম্পর্কিত অ্যাসেট যেমন HTML, CSS, এবং JavaScript সহ হোস্ট ও রান করতে সক্ষম। আমরা একটি খুব সাধারণ ও হালকা মডেল তৈরি করব যা কোনো ইনপুট ভ্যালুর ভিত্তিতে একটি সংখ্যাসূচক আউটপুট ভ্যালু অনুমান করতে পারে (যেমন, একটি বাড়ির স্কয়ার ফুটেজ জানা থাকলে তার দাম কত হবে), এবং এটিকে Firebase Hosting-এর মাধ্যমে হোস্ট করব যাতে এটি বড় পরিসরে ব্যবহার করা যায়।

আপনি যা শিখবেন

  • কাস্টম TensorFlow.js মডেলকে সঠিক ফরম্যাটে কীভাবে সংরক্ষণ করবেন
  • হোস্টিংয়ের জন্য কীভাবে একটি ফায়ারবেস অ্যাকাউন্ট সেটআপ করবেন
  • আপনার অ্যাসেটগুলি ফায়ারবেস হোস্টিং-এ কীভাবে স্থাপন করবেন
  • একটি মডেলের নতুন সংস্করণগুলো কীভাবে স্থাপন করতে হয়।

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

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

আপনি যদি এই স্ট্যাকটি ব্যবহার করে চমৎকার কিছু তৈরি করে থাকেন, তাহলে আমাদের জানান! আমরা আপনার সৃষ্টিগুলো দেখতে আগ্রহী।

আপনার প্রজেক্টটি আমাদের টেনসরফ্লো ব্লগে অথবা আমাদের শো অ্যান্ড টেল-এর মতো ভবিষ্যৎ ইভেন্টগুলিতে প্রদর্শিত হওয়ার সুযোগ পেতে, #MadeWithTFJS হ্যাশট্যাগ ব্যবহার করে সোশ্যাল মিডিয়ায় আমাদের ট্যাগ করুন।

২. ফায়ারবেস হোস্টিং বলতে কী বোঝায়?

ফায়ারবেস হোস্টিং আপনার ওয়েব অ্যাপ, স্ট্যাটিক / ডাইনামিক কন্টেন্ট এবং মাইক্রোসার্ভিসের জন্য দ্রুত ও নিরাপদ প্রোডাকশন-গ্রেড হোস্টিং প্রদান করে।

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

ফায়ারবেস হোস্টিং-এর মূল সক্ষমতা

  • একটি সুরক্ষিত সংযোগের মাধ্যমে কন্টেন্ট পরিবেশন করুন - আধুনিক ওয়েব সুরক্ষিত। প্রায়শই ক্লায়েন্ট সাইডের সেন্সর অ্যাক্সেস করার জন্য সাইটটিকে একটি সুরক্ষিত মাধ্যমে সরবরাহ করতে হয়। ফায়ারবেস হোস্টিং-এ জিরো-কনফিগারেশন SSL বিল্ট-ইন থাকে, তাই হোস্ট করা সমস্ত ফাইলের কন্টেন্ট সর্বদা সুরক্ষিতভাবে সরবরাহ করা হয়।
  • প্রমাণীকরণ সমর্থন সহ স্ট্যাটিক ও ডাইনামিক কন্টেন্ট এবং মাইক্রোসার্ভিস হোস্ট করুন, যাতে ইচ্ছা করলে শুধুমাত্র লগইন করা ব্যবহারকারীরাই সেই ফাইলগুলো লোড বা দেখতে পারেন।
  • দ্রুত কন্টেন্ট সরবরাহ করুন - আপনার আপলোড করা প্রতিটি ফাইল বিশ্বজুড়ে CDN প্রান্তে থাকা SSD-তে ক্যাশ করা থাকে। আপনার ব্যবহারকারীরা যেখানেই থাকুক না কেন, কন্টেন্ট দ্রুত পৌঁছে যায়।
  • একটি কমান্ডেই নতুন সংস্করণ স্থাপন করুন - Firebase কমান্ড লাইন ইন্টারফেস ব্যবহার করে আপনি কয়েক সেকেন্ডের মধ্যেই আপনার অ্যাপ চালু করতে পারেন।
  • এক ক্লিকে রোলব্যাক করুন - দ্রুত ডেপ্লয়মেন্ট দারুণ, কিন্তু ভুল সংশোধন করতে পারাটা আরও ভালো। ফায়ারবেস হোস্টিং এক-ক্লিক রোলব্যাকের সুবিধাসহ সম্পূর্ণ ভার্সনিং এবং রিলিজ ম্যানেজমেন্ট প্রদান করে।

আপনি একটি সাধারণ অ্যাপ ল্যান্ডিং পেজ বা একটি জটিল প্রগ্রেসিভ ওয়েব অ্যাপ (PWA) স্থাপন করুন না কেন, হোস্টিং আপনাকে ওয়েবসাইট এবং অ্যাপ স্থাপন ও পরিচালনার জন্য বিশেষভাবে তৈরি পরিকাঠামো, বৈশিষ্ট্য এবং সরঞ্জাম সরবরাহ করে।

ডিফল্টরূপে, প্রতিটি ফায়ারবেস প্রজেক্টের web.app এবং firebaseapp.com ডোমেইনে বিনামূল্যে সাবডোমেইন থাকে। এই দুটি সাইট একই ডেপ্লয়েড কন্টেন্ট এবং কনফিগারেশন পরিবেশন করে। চাইলে আপনি আপনার নিজের ডোমেইন নেমও একটি ফায়ারবেস-হোস্টেড সাইটের সাথে সংযুক্ত করতে পারেন।

বাস্তবায়নের পদক্ষেপ

কিন্তু এই সব কিছু করার আগে আমাদের একটি মেশিন লার্নিং মডেল এবং ডেপ্লয় করার জন্য একটি ওয়েব অ্যাপ প্রয়োজন। তাহলে চলুন, একটি তৈরি করে ফেলা যাক!

৩. বাড়ির দাম পূর্বাভাস দেওয়ার জন্য একটি সরল মেশিন লার্নিং মডেল

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

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

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

প্রশিক্ষণ ও পরীক্ষার ডেটা

সমস্ত এমএল (ML) মডেল শুরু হয় কিছু উদাহরণমূলক ট্রেনিং ডেটা সংগ্রহের মাধ্যমে, যা ব্যবহার করে মডেলকে ভবিষ্যতের মান অনুমান করতে শেখানো হয়। সাধারণত আপনি এই ধরনের ডেটা কোনো ডাটাবেস, ফাইলের ফোল্ডার, সিএসভি (CSV) বা অন্য কোনো উৎস থেকে নিতে পারেন, কিন্তু এখানে আমরা নিচে দেখানো অনুযায়ী জাভাস্ক্রিপ্টে একটি অ্যারে হিসেবে সরাসরি ২০টি উদাহরণ হার্ডকোড করব। আমরা পরামর্শ দিচ্ছি যে, আপাতত এই কোডটি এমন কোনো পরিবেশে তৈরি করুন যেখানে আপনি স্বাচ্ছন্দ্যে কোডিং করতে পারবেন, যেমন Glitch.com , অথবা যদি আপনি লোকালহোস্টে (localhost) সার্ভার চালাতে পারেন, তবে আপনার নিজের টেক্সট এডিটরে এটি করতে পারেন।

মডেল.জেএস

// House square footage.
const data =    [800, 850, 900, 950, 980, 1000, 1050, 1075, 1100, 1150, 1200, 1250, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000];

// Estimated dollar cost of house for each piece of data above (1000x square footage).
const answers = [800000, 850000, 900000, 950000, 980000, 1000000, 1050000, 1075000, 1100000, 1150000, 1200000,  1250000 , 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1900000, 2000000];

// Testing data separate from training data.
const dataTest =     [886, 1225, 500];
const answersTest =  [886000, 1225000, 500000];

যেমনটি আপনারা দেখতে পাচ্ছেন, প্রতিটি তথ্যের জন্যই একটি সংশ্লিষ্ট উত্তর মান রয়েছে, যেটি হলো সেই মান যা আমরা ভবিষ্যতে ভবিষ্যদ্বাণী করার চেষ্টা করব (আপনি এগুলোকে একটি সাধারণ দ্বি-মাত্রিক গ্রাফের x এবং y মান হিসেবে কল্পনা করতে পারেন)।

সুতরাং ৮০০ মানের জন্য, আমরা আনুমানিক $৮০০,০০০ এর একটি আউটপুট উত্তর তৈরি করতে চাই। ৯০০ মানের জন্য আমরা $৯০০,০০০ আউটপুট দেব, এবং এভাবেই চলতে থাকবে। মূলত সংখ্যাটিকে ১০০০ দিয়ে গুণ করা হয়। তবে এমএল মডেলটি ১০০০ * N এর এই সহজ সম্পর্কটি সম্পর্কে জানে না, এবং আমাদের দেওয়া এই উদাহরণগুলো থেকে এটিকে নিজে থেকেই তা শিখতে হয়।

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

আমরা নিম্নলিখিত html ব্যবহার করে TensorFlow.js লাইব্রেরির সাথে এই স্ক্রিপ্টটি লোড করব:

ট্রেন.এইচটিএমএল

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Training Model</title>
    <meta charset="utf-8">
  </head>  
  <body>   
    <!-- Import TensorFlow.js library -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js" type="text/javascript"></script>
    <!-- Import our JS code to train the model -->
    <script src="/model.js" defer></script>
  </body>
</html>

মডেলকে প্রশিক্ষণ দেওয়া

এরপরে, ফাইলের শেষে আমাদের বিদ্যমান JS কোডের সাথে নিচের কোডটি যোগ করে মডেলটিকে প্রশিক্ষণ দিতে হবে।

কৌতূহলীদের জন্য কমেন্ট যোগ করা হয়েছে, কিন্তু আগেই যেমন বলা হয়েছে, এই কোডল্যাবটি মূলত একটি সেভ করা মডেল নিয়ে সেটিকে হোস্ট করার বিষয়ে। আপনি যদি মডেল তৈরি করার বিষয়টি আরও বিস্তারিতভাবে বুঝতে চান, তাহলে শেষে আরও কোডল্যাবের লিঙ্ক দেওয়া আছে। আপাতত আপনি কোডটি আপনার প্রজেক্টে কপি-পেস্ট করতে পারেন।

মডেল.জেএস

// Create Tensor representations of our vanilla JS arrays above 
// so can be used to train our model.
const trainTensors = {
  data: tf.tensor2d(data, [data.length, 1]),
  answer: tf.tensor2d(answers, [answers.length, 1])
};

const testTensors = {
  data: tf.tensor2d(dataTest, [dataTest.length, 1]),
  answer: tf.tensor2d(answersTest, [answersTest.length, 1])
};


// Now actually create and define model architecture.
const model = tf.sequential();

// We will use one dense layer with 1 neuron and an input of 
// a single value.
model.add(tf.layers.dense({inputShape: [1], units: 1}));

// Choose a learning rate that is suitable for the data we are using.
const LEARNING_RATE = 0.0001;

train();

async function train() {
  // Compile the model with the defined learning rate and specify
  // our loss function to use.
  model.compile({
    optimizer: tf.train.sgd(LEARNING_RATE),
    loss: 'meanAbsoluteError'
  });

  // Finally do the training itself over 500 iterations of the data.
  // As we have so little training data we use batch size of 1.
  // We also set for the data to be shuffled each time we try 
  // and learn from it.
  let results = await model.fit(trainTensors.data, trainTensors.answer, {epochs: 500, batchSize: 1, shuffle: true});
  
  // Once trained we can evaluate the model.
  evaluate();
}

async function evaluate(stuff) {
  // Predict answer for a single piece of data.
  model.predict(tf.tensor2d([[768]])).print();
}

উপরের কোডটি ব্যবহার করে আমরা এমন একটি মডেলকে প্রশিক্ষণ দিতে সক্ষম হয়েছি যা ইনপুট মান দেওয়া থাকলে একটি আউটপুট মান অনুমান করতে পারে। উপরের কোডটি চালালে আমি ৭৬৮ ইনপুট মানের জন্য ৭৬৮,০৭৩-এর একটি পূর্বাভাস পাই, যা আপনার ব্রাউজারের ডেভেলপার কনসোলে প্রিন্ট করা হয় (যদি এটি আগে থেকে খোলা না থাকে তবে খোলার জন্য F12 চাপুন)। বাড়ির দামের এই অনুমানটি বেশ ভালো, কারণ আমরা এমন উদাহরণ দিয়েছিলাম যা ইনপুটের চেয়ে ১০০০ গুণ বেশি ছিল। দ্রষ্টব্য: আপনার অনুমান করা মান সামান্য ভিন্ন হতে পারে এবং এটি স্বাভাবিক।

এই পারফরম্যান্সে আমরা সন্তুষ্ট হলে, এখন আমাদের শুধু এই মডেলটি ডিস্কে সেভ করতে হবে যাতে আমরা এটিকে ফায়ারবেস হোস্টিং-এ আপলোড করতে পারি!

মডেলটি সংরক্ষণ করা হচ্ছে

উপরের evaluate ফাংশনের শেষে (model.predict-এর পরে) নিচের কোডটি যোগ করলে, ট্রেনিং সম্পন্ন হওয়ার পর আমরা ফলাফল মডেলটি সরাসরি ওয়েব ব্রাউজার থেকে এক্সপোর্ট করে ডিস্কে সেভ করতে পারব। ফলে, ভবিষ্যতে প্রতিবার পেজ লোড করার সময় পুনরায় ট্রেনিং দেওয়ার প্রয়োজন ছাড়াই আমরা এটিকে কোথাও হোস্ট করে ব্যবহার করতে পারব।

মডেল.জেএস

await model.save('downloads://my-model');

আপনি এখন train.html-এ গিয়ে পেজটি রান করলে, এটি মডেলটিকে ট্রেইন করবে (যাতে কয়েক সেকেন্ড সময় লাগতে পারে) এবং কাজ শেষ হলে প্রশিক্ষিত মডেলটি ডাউনলোড করার জন্য অনুরোধ জানাবে।

৪. ফায়ারবেস সেট আপ করা

ফায়ারবেসে সাইন ইন করুন এবং একটি প্রজেক্ট তৈরি করুন।

আপনি যদি Firebase-এ নতুন হন, তবে আপনার Google অ্যাকাউন্ট ব্যবহার করে সাইন আপ করা সহজ। শুধু https://firebase.google.com/ -এ যান এবং আপনার পছন্দের নিয়মিত Google অ্যাকাউন্ট দিয়ে সাইন ইন করুন। হোম পেজে রিডাইরেক্ট হয়ে গেলে, পেজের উপরের ডানদিকে থাকা 'go to console'-এ ক্লিক করুন:

ea7ff3f08e4019b0.png

একবার আপনাকে কনসোলে রিডাইরেক্ট করা হলে আপনি এইরকম একটি ল্যান্ডিং পেজ দেখতে পাবেন:

166d9408ad46599b.png

একটি নতুন ফায়ারবেস প্রজেক্ট তৈরি করতে, দেখানো অনুযায়ী কেবল 'অ্যাড প্রজেক্ট'-এ ক্লিক করুন, আপনার প্রজেক্টের একটি অনন্য নাম দিন, শর্তাবলী গ্রহণ করুন এবং 'কন্টিনিউ'-তে ক্লিক করুন।

এরপর আপনাকে জিজ্ঞাসা করা হবে যে আপনি আপনার প্রজেক্টে অ্যানালিটিক্স যোগ করতে চান কিনা। আপনি যদি এই ধরনের অ্যানালিটিক্স অ্যাক্সেস করতে চান, তাহলে নির্দ্বিধায় এই অপশনটি এনাবল করুন এবং দেখানো অনুযায়ী 'continue'-তে ক্লিক করুন:

a34c2be47b26e6b5.png

সবকিছু ঠিকঠাক থাকলে, দেখানো ছবির মতো একটি প্রজেক্ট প্রস্তুত পৃষ্ঠা দেখতে পাবেন:

1306dc803ad22338.png

বাহ! আমাদের একটি প্রজেক্ট তৈরি হয়ে গেছে। নতুন তৈরি হওয়া প্রজেক্টটির কনসোলে যেতে 'continue'-তে ক্লিক করুন। পরে ব্যবহারের জন্য পেজটি খোলা রাখুন, কিন্তু আপাতত আমাদের কিছু টুলিং ইনস্টল করতে হবে।

CLI ইনস্টল এবং সংযোগ করা

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

তবে লিনাক্সে, যদি আগে থেকে ইনস্টল করা না থাকে, তাহলে আমরা প্রথমে একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত ৩টি কমান্ড ব্যবহার করে NPM এবং Node.js ইনস্টল করব ( অন্যান্য পরিবেশ ব্যবহার করলে এই নির্দেশাবলী অনুসরণ করুন):

কমান্ড লাইন টার্মিনাল:

sudo apt update

কমান্ড লাইন টার্মিনাল:

sudo apt install nodejs

কমান্ড লাইন টার্মিনাল:

sudo apt install npm

এখন আপনার Node.js এবং NPM ইনস্টল করা আছে। Firebase কমান্ড লাইন টুলস ইনস্টল করার জন্য আপনাকে শুধু একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালাতে হবে:

কমান্ড লাইন টার্মিনাল:

sudo npm install -g firebase-tools

চমৎকার! আমরা এখন আমাদের ফায়ারবেস প্রজেক্টটি সিস্টেমের সাথে সংযুক্ত করতে প্রস্তুত, যাতে আমরা এতে ফাইল পুশ করতে এবং আরও অনেক কিছু করতে পারি।

ফায়ারবেসে লগ ইন করা

নিম্নলিখিত কমান্ডটি চালিয়ে আপনার গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেসে লগ ইন করুন:

কমান্ড লাইন টার্মিনাল:

firebase login

আপনাকে আপনার গুগল ফায়ারবেস অ্যাকাউন্টে অ্যাক্সেস দেওয়ার জন্য অনুরোধ করা হবে, যেমনটি দেখানো হয়েছে:

4dc28589bef2ff5d.png

এটিতে অনুমতি দিন এবং অবশেষে আপনি আপনার কমান্ড লাইন টুলগুলির সাথে আপনার ফায়ারবেস অ্যাকাউন্টের একটি সফল সংযোগ দেখতে পাবেন:

df397ec7a555e8de.png

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

67a3ff39d3c0f3e4.png

অভিনন্দন! আমরা এখন আমাদের লোকাল মেশিন থেকে তৈরি করা প্রজেক্টে ফাইল পুশ করার জন্য প্রস্তুত।

ফায়ারবেস হোস্টিং-এ ডেপ্লয় করার জন্য আপনার প্রজেক্টটি শুরু করা হচ্ছে।

আপনার লোকাল ফোল্ডারকে আপনার ফায়ারবেস প্রজেক্টের সাথে সংযুক্ত করতে, আপনার লোকাল প্রজেক্ট ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান (যে ফোল্ডারটি আপনি ডিপ্লয় করার সময় ফাইল আপলোড করার জন্য ব্যবহার করতে চান)।

কমান্ড লাইন টার্মিনাল:

firebase init

এই কমান্ডটি চালানোর পর, সেটআপ সম্পূর্ণ করতে নিচে দেখানো টার্মিনালের নির্দেশাবলী অনুসরণ করুন:

61e0f6d92ef3e1c4.png

এখানে আপনি কিবোর্ডের ডাউন অ্যারো ব্যবহার করে খুব সহজেই হোস্টিং নির্বাচন করতে পারেন, এরপর নির্বাচন করার জন্য স্পেসবার এবং নিশ্চিত করার জন্য এন্টার চাপুন।

এখন আমরা ব্যবহারের জন্য পূর্বে তৈরি করা বিদ্যমান প্রকল্পটি নির্বাচন করতে পারি:

4f2a1696d5cfd72f.png

"use an existing project"-এর উপর এন্টার চাপুন এবং তারপর নিচে দেখানো অনুযায়ী ডাউন অ্যারো কী ব্যবহার করে এটি নির্বাচন করুন:

4dfcf2dff745f2c.png

অবশেষে এটি ব্যবহার করতে এন্টার চাপুন এবং তারপরে পপ-আপ হওয়া চূড়ান্ত স্ক্রিনে ডিফল্টগুলি গ্রহণ করুন এবং একক পৃষ্ঠার অ্যাপ্লিকেশন হিসাবে কনফিগার করতে "না" বলুন:

7668a2175b624af2.png

এর মাধ্যমে আপনি চাইলে একাধিক এইচটিএমএল পেজ হোস্ট করতে পারবেন।

এখন প্রারম্ভিককরণ সম্পন্ন হয়েছে, আপনি লক্ষ্য করবেন যে আমরা উপরের কমান্ডগুলো যে ডিরেক্টরি থেকে চালিয়েছিলাম, সেখানে একটি firebase.json ফাইল এবং একটি 'public' ফোল্ডার তৈরি হয়েছে।

cd7724b92f3d507.png

এখন আমাদের শুধু যে ফাইলগুলো ডেপ্লয় করতে চাই, সেগুলো আমাদের তৈরি করা পাবলিক ফোল্ডারে সরিয়ে নিতে হবে এবং তাহলেই ডেপ্লয় করার জন্য প্রস্তুত হয়ে যাবে! চলুন, এখনই সেটা করা যাক।

৫. আপনার TensorFlow.js ওয়েবপেজ তৈরি করা

আপনার সংরক্ষিত মডেল লোড করা হচ্ছে

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

cd6f565189e23705.png

আপনি আরও লক্ষ্য করবেন যে Firebase আমাদের জন্য index.html এবং 404.html ফাইল তৈরি করেছে। চলুন, আপনার কম্পিউটারের পছন্দের টেক্সট এডিটর ব্যবহার করে index.html ফাইলটি সম্পাদনা করি, যাতে আমরা দেখানো পদ্ধতি অনুযায়ী আমাদের নিজস্ব কাস্টম কোড যোগ করতে পারি:

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Hello World - TensorFlow.js</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- Import the webpage's stylesheet -->
    <link rel="stylesheet" href="style.css">
  </head>  
  <body>
    <h1>TensorFlow.js Hello World</h1>
    <p>Check the console (Press F12) to see predictions!</p>
    <!-- Import TensorFlow.js library -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js" type="text/javascript"></script>

    <!-- Import the page's JavaScript to do some stuff -->
    <script src="script.js" defer></script>
  </body>
</html>

উপরে আমাদের index.html-এর নতুন কোডে আমরা একটি স্টাইল শীট নির্দিষ্ট করেছি, যাতে আমরা চাইলে পরে আমাদের পেজে স্টাইল যোগ করতে পারি। এছাড়াও, আমাদের TensorFlow.js-এ সংরক্ষিত মডেলটি ব্যবহার করার জন্য প্রয়োজনীয় কোড হোস্ট করতে আমরা script.js-ও ব্যবহার করেছি।

চলুন এখন সেই ফাইলগুলো তৈরি করে নিই এবং সেগুলোকে নিম্নোক্তভাবে তথ্য দিয়ে পূরণ করি, যাতে সেগুলো কোনো দরকারি কাজ করতে পারে:

স্টাইল.সিএসএস

/** Leave blank for now **/

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

// Load our saved model from current directory (which will be 
// hosted via Firebase Hosting)
async function predict() {
  // Relative URL provided for my-model.json.
  const model = await tf.loadLayersModel('my-model.json');
  // Once model is loaded, let's try using it to make a prediction!
  // Print to developer console for now.
  model.predict(tf.tensor2d([[1337]])).print();
}

predict();

আপনি যদি ধাপগুলো সঠিকভাবে অনুসরণ করে থাকেন, তাহলে আমাদের তৈরি করা পাবলিক ফোল্ডারটিতে এখন নিম্নলিখিত সম্পাদিত ফাইলগুলো দেখতে পাবেন:

253498c703c04ee.png

এখন আমাদের শুধু ফাইলগুলো ডেপ্লয় করতে হবে, যাতে আমরা পরীক্ষা করে দেখতে পারি যে এটি ঠিকঠাক কাজ করছে কি না!

৬. আপনার মডেল এবং ওয়েবসাইট স্থাপন করা

লাইভ হচ্ছে

আপনার লোকাল মেশিনের ফায়ারবেস প্রজেক্ট ফোল্ডারে খোলা টার্মিনাল উইন্ডোটিতে ফিরে যান (এই ফোল্ডারটিতেই আমাদের উপরের 'public' ফোল্ডারটির সাথে ফায়ারবেস ইনিট ফাইলগুলো রয়েছে)।

আপনার পাবলিক ফোল্ডারের ফাইলগুলো স্থাপন করতে কেবল নিম্নলিখিতটি টাইপ করুন:

কমান্ড লাইন টার্মিনাল:

firebase deploy

টার্মিনাল কমান্ডটি সম্পূর্ণ হতে দিন এবং আপনি একটি সফল রিলিজ সম্পন্ন হওয়ার বার্তা পাবেন, সাথে এটি ব্যবহার করার জন্য একটি URL-ও থাকবে:

c5795cae85ed82a5.png

আমাদের উপরের উদাহরণে আপনি দেখতে পাচ্ছেন যে, আমাদের ডিপ্লয়মেন্টটি দেখার জন্য চূড়ান্ত ইউআরএলটি হলো:

https://tensorflow-js-demo.web.app (কিন্তু আপনার URL হবে আপনার তৈরি করা প্রজেক্টের নাম)।

এটি কাজ করছে কিনা তা পরীক্ষা করতে একটি ওয়েব ব্রাউজারে এই URL-টি খুলুন। সফল হলে, আপনার খোলা পেজটির ডেভেলপার কনসোলে এই ধরনের কিছু প্রিন্ট হবে (ডেভেলপার কনসোল খুলতে F12 চাপুন)।

182aee0acfa7c41e.png

যেমনটা আপনারা দেখতে পাচ্ছেন, পেজটি ডেপ্লয় করা ডোমেইনে লোড হচ্ছে, এবং আমরা সঠিকভাবে ১৩৩৭ বর্গফুটের জন্য আমাদের মডেলের পূর্বাভাস দেখতে পাচ্ছি, যার মূল্য দাঁড়িয়েছে $১,৩৩৬,৯৯৯.২৫। এটি সত্যিই একটি খুব ভালো অনুমান, কারণ আমরা এর পরিমাণ ১০০০ গুণ বেশি আশা করেছিলাম। আমরা অবশ্যই আমাদের ইচ্ছামতো যত খুশি পূর্বাভাস তৈরি করতে পারি, যদি মডেলটিকে কল করার জন্য একটি সুন্দর ইউজার ইন্টারফেস তৈরি করা যায়। আর এই পুরো প্রক্রিয়াটি জাভাস্ক্রিপ্টে চলবে, যা আপনার কোয়েরিগুলোকে ব্যক্তিগত এবং সুরক্ষিত রাখবে।

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

ব্যবহার পর্যবেক্ষণ

আপনার ওয়েবসাইটের কোডে যোগ করা যেকোনো গুগল অ্যানালিটিক্স ছাড়াও, ফায়ারবেস আপনার প্রোজেক্টের জন্য কনসোলের মাধ্যমে ভার্সনিং এবং ব্যবহারের পরিসংখ্যানও প্রদান করে। ডেপ্লয় করার পর আপনি এই ধরনের কিছু দেখতে পাবেন, যা আপনি প্রয়োজন অনুযায়ী সময়ে সময়ে পরীক্ষা করতে পারেন:

42b1cb8f7c10016.png

fbdd6504bec7c3d.png

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

৭. অভিনন্দন

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

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

b1e4c1bf304a4869.png

পুনরালোচনা

এই কোড ল্যাবে আমরা:

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

এরপর কী?

এখন যেহেতু আপনার কাছে শুরু করার জন্য একটি কার্যকরী ভিত্তি আছে, এই মেশিন লার্নিং মডেল ডেপ্লয়মেন্ট বয়লারপ্লেটটিকে আরও উন্নত করতে আপনি কী কী সৃজনশীল ধারণা নিয়ে আসতে পারেন?

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

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

আরও গভীরে যাওয়ার জন্য TensorFlow.js-এর আরও কোডল্যাব রয়েছে।

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