Transfer Learning এর মাধ্যমে Model Performance উন্নয়ন

Transfer Learning এবং Pretrained মডেল - মেশিন লার্নিং (Machine Learning) - Machine Learning

396

Transfer Learning হলো একটি মেশিন লার্নিং কৌশল, যেখানে পূর্ববর্তী কোনো মডেলের শেখানো বৈশিষ্ট্য এবং জ্ঞান (knowledge) ব্যবহার করা হয় নতুন মডেল বা নতুন ডেটা সেটের উপর। এই পদ্ধতি বিশেষভাবে কার্যকরী যখন ডেটার পরিমাণ সীমিত থাকে এবং প্রশিক্ষণ গ্রহণের জন্য বড় ডেটাসেট পাওয়া কঠিন হয়।

Transfer Learning এর মাধ্যমে মডেলটি নতুন টাস্ক বা ডেটার জন্য দ্রুত শিখতে সক্ষম হয়, কারণ এটি পূর্ববর্তী শিক্ষিত মডেল থেকে শিখে নেয়। এর মাধ্যমে model performance অনেক ভালো হতে পারে এবং প্রশিক্ষণের সময়ও অনেক কমে যেতে পারে।


Transfer Learning এর প্রক্রিয়া:

  1. Pretrained Model ব্যবহার:
    • প্রথমে, একটি মডেল, যেমন VGG16, ResNet, InceptionV3 ইত্যাদি, একটি বড় ডেটাসেট (যেমন ImageNet) থেকে ট্রেনিং করা হয়। এই মডেলগুলো সাধারণত ডেটার প্যাটার্ন এবং বৈশিষ্ট্যগুলো শিখে ফেলেছে, যা নতুন টাস্কে কাজে লাগানো যায়।
  2. ফিচার এক্সট্রাক্টর হিসেবে ব্যবহার:
    • Pretrained মডেলটি ফিচার এক্সট্রাকশনের জন্য ব্যবহার করা হয়, অর্থাৎ, এর কনভুলিউশনাল লেয়ারগুলি থেকে শিখানো বৈশিষ্ট্যগুলির উপর ভিত্তি করে নতুন ডেটা প্রক্রিয়া করা হয়।
  3. ফাইন-টিউনিং (Fine-Tuning):
    • মডেলের শেষ অংশে নতুন টাস্কের জন্য লেয়ারগুলো অ্যাড করা হয়। প্রথম লেয়ারগুলি freeze (অপরিবর্তিত) করা হয়, এবং কেবলমাত্র পরবর্তী লেয়ারগুলি ট্রেনিং করা হয়। প্রয়োজনে পুরো মডেলটিকে পুনরায় প্রশিক্ষণ করা হয়।

Transfer Learning এর সুবিধা:

  • প্রশিক্ষণের সময় কমানো: পূর্ববর্তী মডেল থেকে জ্ঞান গ্রহণ করে নতুন টাস্কে দ্রুত শিখতে পারে, তাই প্রশিক্ষণের সময় অনেক কমে যায়।
  • ডেটার অভাব পূরণ: যখন পর্যাপ্ত ট্রেনিং ডেটা নেই, তখন transfer learning সাহায্য করে, কারণ pretrained মডেলগুলোর শেখানো বৈশিষ্ট্যগুলি নতুন টাস্কে ব্যবহৃত হতে পারে।
  • উন্নত পারফরম্যান্স: pretrained মডেল সাধারণত ভাল পারফরম্যান্স দেয় কারণ তারা বৃহৎ ডেটাসেটে প্রশিক্ষিত, যা অনেক গুরুত্বপূর্ণ বৈশিষ্ট্য শিখে ফেলেছে।
  • কম্পিউটেশনাল খরচ কমানো: নতুন মডেল প্রশিক্ষণ নিতে না হওয়ায় কম্পিউটেশনাল খরচ কমে যায়।

Transfer Learning এর প্রক্রিয়া:

এখানে আমরা Keras এবং TensorFlow ব্যবহার করে Transfer Learning এর মাধ্যমে একটি ইমেজ ক্লাসিফিকেশন মডেল তৈরি করবো। উদাহরণস্বরূপ, VGG16 মডেলটি ImageNet ডেটাসেটের উপর প্রশিক্ষিত এবং এটি আমাদের নতুন ডেটাসেটে ভালো ফলাফল প্রদান করতে পারে।

ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা

import numpy as np
import tensorflow as tf
from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import Adam

ধাপ ২: Pretrained VGG16 মডেল লোড করা

আমরা VGG16 মডেলটি লোড করবো, যা ImageNet ডেটাসেটে পূর্বে প্রশিক্ষিত।

# VGG16 মডেল লোড করা, include_top=False মানে, শেষের ফুলি কানেক্টেড লেয়ার বাদ দেয়া
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# Base Model কে freeze করা (trainable=False), যাতে এর কনভুলিউশনাল লেয়ারগুলো অপরিবর্তিত থাকে
base_model.trainable = False

ধাপ ৩: মডেল তৈরি করা

এখন আমরা VGG16 এর উপরের লেয়ারগুলোর সাথে নতুন লেয়ারগুলো যোগ করবো এবং নতুন মডেলটি তৈরি করবো।

# মডেল তৈরি
model = Sequential()

# Pretrained VGG16 মডেলকে add করা
model.add(base_model)

# Flatten লেয়ার যোগ করা
model.add(Flatten())

# নিউরাল নেটওয়ার্কের fully connected layer
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))

# আউটপুট লেয়ার
model.add(Dense(10, activation='softmax'))  # 10টি ক্লাসের জন্য (আপনার ডেটার উপর নির্ভর করবে)

ধাপ ৪: মডেল কম্পাইল করা

মডেলটি কম্পাইল করতে হবে এবং Adam optimizer এবং categorical crossentropy loss function ব্যবহার করতে হবে।

model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])

ধাপ ৫: ডেটা প্রক্রিয়াকরণ

এখন, আমাদের ডেটা প্রস্তুত করতে হবে এবং ImageDataGenerator ব্যবহার করে ডেটা অগমেন্টেশন প্রয়োগ করতে হবে।

train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)

train_generator = train_datagen.flow_from_directory('path_to_train_data', target_size=(224, 224), batch_size=32, class_mode='categorical')

ধাপ ৬: মডেল ট্রেনিং

এখন, আমরা মডেলটি ট্রেনিং করতে পারি:

history = model.fit(train_generator, epochs=10, steps_per_epoch=100)

ধাপ ৭: মডেল মূল্যায়ন

মডেল প্রশিক্ষণের পর, আমরা টেস্ট ডেটার উপর এর কার্যকারিতা পরীক্ষা করতে পারি:

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory('path_to_test_data', target_size=(224, 224), batch_size=32, class_mode='categorical')

test_loss, test_acc = model.evaluate(test_generator)
print(f"Test accuracy: {test_acc * 100:.2f}%")

Fine-Tuning (ফাইন-টিউনিং)

  • এক্ষেত্রে, যদি আরো ভালো ফলাফল পেতে চান, তবে আপনি fine-tuning করতে পারেন। অর্থাৎ, pretrained model এর কিছু লেয়ারগুলোর প্যারামিটার আপডেট করতে পারেন।
# Base model এর কিছু লেয়ারকে trainable করা
base_model.trainable = True
for layer in base_model.layers[:15]:
    layer.trainable = False

# পুনরায় কম্পাইল করা
model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

# পুনরায় ট্রেনিং করা
history = model.fit(train_generator, epochs=10, steps_per_epoch=100)

সারাংশ:

  • Transfer Learning মডেলটি pretrained model এর উপর ভিত্তি করে একটি নতুন মডেল তৈরি করে, যেখানে পূর্বের মডেলটির শিখানো বৈশিষ্ট্যগুলো নতুন টাস্কে কাজে লাগে।
  • Fine-tuning মডেলটি আরও নির্ভুলতা অর্জন করতে সাহায্য করে।
  • এই প্রক্রিয়া ডেটার অভাব এবং প্রশিক্ষণের সময় কমাতে সাহায্য করে, যা মডেলটির কার্যকারিতা উন্নত করে।
Content added By
Promotion

Are you sure to start over?

Loading...