একটি প্রাক-প্রশিক্ষিত মডেল ব্যবহার করুন

এই টিউটোরিয়ালে আপনি একটি উদাহরণ ওয়েব অ্যাপ্লিকেশন অন্বেষণ করবেন যা TensorFlow.js Layers API ব্যবহার করে ট্রান্সফার লার্নিং প্রদর্শন করে। উদাহরণটি একটি প্রাক-প্রশিক্ষিত মডেল লোড করে এবং তারপরে ব্রাউজারে মডেলটিকে পুনরায় প্রশিক্ষণ দেয়।

মডেলটিকে Python-এ MNIST ডিজিট ক্লাসিফিকেশন ডেটাসেটের 0-4 ডিজিটে প্রাক-প্রশিক্ষিত করা হয়েছে। ব্রাউজারে পুনরায় প্রশিক্ষণ (বা ট্রান্সফার লার্নিং) 5-9 সংখ্যা ব্যবহার করে। উদাহরণটি দেখায় যে একটি প্রাক-প্রশিক্ষিত মডেলের প্রথম কয়েকটি স্তর স্থানান্তর শেখার সময় নতুন ডেটা থেকে বৈশিষ্ট্যগুলি বের করতে ব্যবহার করা যেতে পারে, এইভাবে নতুন ডেটাতে দ্রুত প্রশিক্ষণ সক্ষম করে।

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

উদাহরণ কোড GitHub এ উপলব্ধ।

(ঐচ্ছিক) উদাহরণটি স্থানীয়ভাবে চালান

পূর্বশর্ত

স্থানীয়ভাবে উদাহরণ অ্যাপ্লিকেশন চালানোর জন্য, আপনার উন্নয়ন পরিবেশে নিম্নলিখিত ইনস্টল করা প্রয়োজন:

উদাহরণ অ্যাপটি ইনস্টল করুন এবং চালান

  1. tfjs-examples সংগ্রহস্থল ক্লোন করুন বা ডাউনলোড করুন।
  2. mnist-transfer-cnn ডিরেক্টরিতে পরিবর্তন করুন:

    cd tfjs-examples/mnist-transfer-cnn
    
  3. নির্ভরতা ইনস্টল করুন:

    yarn
    
  4. বিকাশ সার্ভার শুরু করুন:

    yarn run watch
    

উদাহরণ অন্বেষণ

উদাহরণ অ্যাপটি খুলুন । (অথবা, যদি আপনি স্থানীয়ভাবে উদাহরণটি চালাচ্ছেন, আপনার ব্রাউজারে http://localhost:1234 এ যান।)

আপনি MNIST CNN Transfer Learning শিরোনামের একটি পৃষ্ঠা দেখতে পাবেন। অ্যাপটি চেষ্টা করার জন্য নির্দেশাবলী অনুসরণ করুন।

এখানে চেষ্টা করার জন্য কয়েকটি জিনিস রয়েছে:

  • বিভিন্ন প্রশিক্ষণ মোডের সাথে পরীক্ষা করুন এবং ক্ষতি এবং নির্ভুলতার তুলনা করুন।
  • বিভিন্ন বিটম্যাপ উদাহরণ নির্বাচন করুন এবং শ্রেণীবিভাগের সম্ভাব্যতা পরিদর্শন করুন। মনে রাখবেন যে প্রতিটি বিটম্যাপের উদাহরণের সংখ্যাগুলি হল গ্রেস্কেল পূর্ণসংখ্যার মান যা একটি চিত্র থেকে পিক্সেলকে প্রতিনিধিত্ব করে।
  • বিটম্যাপ পূর্ণসংখ্যার মানগুলি সম্পাদনা করুন এবং দেখুন কিভাবে পরিবর্তনগুলি শ্রেণীবিভাগের সম্ভাবনাগুলিকে প্রভাবিত করে৷

কোড অন্বেষণ

উদাহরণ ওয়েব অ্যাপটি এমন একটি মডেল লোড করে যা MNIST ডেটাসেটের একটি উপসেটে প্রাক-প্রশিক্ষিত হয়েছে। প্রাক-প্রশিক্ষণ একটি পাইথন প্রোগ্রামে সংজ্ঞায়িত করা হয়েছে: mnist_transfer_cnn.py । পাইথন প্রোগ্রামটি এই টিউটোরিয়ালের সুযোগের বাইরে, কিন্তু আপনি মডেল রূপান্তরের একটি উদাহরণ দেখতে চান কিনা তা দেখার মতো।

index.js ফাইলটিতে ডেমোর জন্য বেশিরভাগ প্রশিক্ষণ কোড থাকে। যখন index.js ব্রাউজারে চলে, তখন একটি সেটআপ ফাংশন, setupMnistTransferCNN , MnistTransferCNNPredictor তাৎক্ষণিক এবং আরম্ভ করে, যা পুনঃপ্রশিক্ষণ এবং পূর্বাভাস রুটিনগুলিকে অন্তর্ভুক্ত করে।

আরম্ভ করার পদ্ধতি, MnistTransferCNNPredictor.init , একটি মডেল লোড করে, পুনরায় প্রশিক্ষণের ডেটা লোড করে এবং পরীক্ষার ডেটা তৈরি করে। মডেলটি লোড করে এমন লাইনটি এখানে:

this.model = await loader.loadHostedPretrainedModel(urls.model);

আপনি যদি loader.loadHostedPretrainedModel এর সংজ্ঞাটি দেখেন, তাহলে আপনি দেখতে পাবেন যে এটি tf.loadLayersModel এ কলের ফলাফল প্রদান করে। লেয়ার অবজেক্টের সমন্বয়ে তৈরি একটি মডেল লোড করার জন্য এটি TensorFlow.js API।

পুনরায় প্রশিক্ষণের যুক্তি MnistTransferCNNPredictor.retrainModel এ সংজ্ঞায়িত করা হয়েছে। ব্যবহারকারী যদি ফ্রিজ ফিচার লেয়ারকে ট্রেনিং মোড হিসেবে সিলেক্ট করে থাকেন, তাহলে বেস মডেলের প্রথম 7টি লেয়ার হিমায়িত করা হয় এবং শুধুমাত্র শেষ 5টি লেয়ারকে নতুন ডেটার উপর প্রশিক্ষিত করা হয়। যদি ব্যবহারকারী পুনরায় সূচনা করা ওজন নির্বাচন করে থাকে, তবে সমস্ত ওজন পুনরায় সেট করা হয় এবং অ্যাপটি কার্যকরভাবে মডেলটিকে স্ক্র্যাচ থেকে প্রশিক্ষণ দেয়।

if (trainingMode === 'freeze-feature-layers') {
  console.log('Freezing feature layers of the model.');
  for (let i = 0; i < 7; ++i) {
    this.model.layers[i].trainable = false;
  }
} else if (trainingMode === 'reinitialize-weights') {
  // Make a model with the same topology as before, but with re-initialized
  // weight values.
  const returnString = false;
  this.model = await tf.models.modelFromJSON({
    modelTopology: this.model.toJSON(null, returnString)
  });
}

মডেলটি তারপর কম্পাইল করা হয়, এবং তারপর এটি model.fit() ব্যবহার করে পরীক্ষার ডেটাতে প্রশিক্ষিত হয়:

await this.model.fit(this.gte5TrainData.x, this.gte5TrainData.y, {
  batchSize: batchSize,
  epochs: epochs,
  validationData: [this.gte5TestData.x, this.gte5TestData.y],
  callbacks: [
    ui.getProgressBarCallbackConfig(epochs),
    tfVis.show.fitCallbacks(surfaceInfo, ['val_loss', 'val_acc'], {
      zoomToFit: true,
      zoomToFitAccuracy: true,
      height: 200,
      callbacks: ['onEpochEnd'],
    }),
  ]
});

model.fit() প্যারামিটার সম্পর্কে আরও জানতে, API ডকুমেন্টেশন দেখুন।

নতুন ডেটাসেটে (অঙ্ক 5-9) প্রশিক্ষণের পরে, ভবিষ্যদ্বাণী করতে মডেলটি ব্যবহার করা যেতে পারে। MnistTransferCNNPredictor.predict পদ্ধতি model.predict() ব্যবহার করে এটি করে:

// Perform prediction on the input image using the loaded model.
predict(imageText) {
  tf.tidy(() => {
    try {
      const image = util.textToImageArray(imageText, this.imageSize);
      const predictOut = this.model.predict(image);
      const winner = predictOut.argMax(1);

      ui.setPredictResults(predictOut.dataSync(), winner.dataSync()[0] + 5);
    } catch (e) {
      ui.setPredictError(e.message);
    }
  });
}

tf.tidy এর ব্যবহার নোট করুন, যা মেমরি লিক প্রতিরোধে সাহায্য করে।

আরও জানুন

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

TensorFlow.js

টেনসরফ্লো কোর