Transfer Learning এর মাধ্যমে Custom মডেল তৈরি

Transfer Learning এবং Pretrained মডেল - কেরাস ডিপ লার্নিং (Deep Learning with Keras) - Machine Learning

402

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

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

Transfer Learning-এর দুটি প্রধান ধাপ থাকে:

  1. Pre-trained Model: পূর্বে প্রশিক্ষিত মডেল ব্যবহার করা, যেমন VGG16, ResNet, Inception ইত্যাদি, যা একটি বৃহৎ ডেটাসেটে (যেমন ImageNet) প্রশিক্ষিত।
  2. Fine-tuning: পূর্বে প্রশিক্ষিত মডেলের লাস্ট লেয়ারগুলো ফাইন-টিউন করা, যাতে এটি নতুন টাস্কের জন্য উপযোগী হয়।

এখানে আমরা VGG16 মডেল ব্যবহার করে একটি Custom Image Classification Model তৈরি করবো।


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

প্রথমে, আপনার TensorFlow ইনস্টল করা দরকার। যদি এটি ইনস্টল না করা থাকে, তাহলে কমান্ড লাইনে নিচেরটি লিখুন:

pip install tensorflow

ধাপ ২: Pre-trained Model (VGG16) লোড করা

এখন আমরা VGG16 মডেলটি লোড করব, যা ImageNet ডেটাসেটে প্রশিক্ষিত। এই মডেলটি পূর্বে প্রশিক্ষিত ফিচারগুলির মাধ্যমে আমাদের ডেটার জন্য ভাল পারফরম্যান্স দিবে।

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.applications import VGG16
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# VGG16 মডেল লোড করা (ImageNet এর উপর প্রশিক্ষিত)
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# পূর্বের লেয়ারগুলো লক করা (ফাইন টিউনিং এর জন্য নয়)
base_model.trainable = False

# মডেল চেক
base_model.summary()
  • weights='imagenet': ImageNet ডেটাসেটের উপর প্রশিক্ষিত ফিচার লোড করবে।
  • include_top=False: VGG16 এর শেষ লেয়ার বাদ দিচ্ছি, কারণ আমরা আমাদের কাস্টম আউটপুট লেয়ার ব্যবহার করব।

ধাপ ৩: Custom লেয়ার যোগ করা

এখন আমরা কাস্টম লেয়ার যোগ করব, যা আমাদের ডেটাসেটের জন্য কাজ করবে। সাধারণত, Flatten এবং Dense লেয়ার ব্যবহার করা হয় কাস্টম মডেল তৈরির জন্য।

# কাস্টম মডেল তৈরি করা
model = models.Sequential()

# Pre-trained VGG16 মডেল যোগ করা
model.add(base_model)

# Flatten লেয়ার (কনভোলিউশনাল লেয়ার থেকে একক ভেক্টরে রূপান্তর)
model.add(layers.Flatten())

# Fully connected layer (Dense Layer) 1
model.add(layers.Dense(128, activation='relu'))

# Dropout লেয়ার (অতিরিক্ত শিখন এড়াতে)
model.add(layers.Dropout(0.5))

# আউটপুট লেয়ার (Softmax অ্যাক্টিভেশন ফাংশন সহ)
model.add(layers.Dense(10, activation='softmax'))  # 10টি ক্লাসের জন্য

# মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# মডেল সারাংশ দেখা
model.summary()
  • Flatten: কনভোলিউশনাল লেয়ারগুলির আউটপুটকে একক ভেক্টরে রূপান্তর করে, যাতে তা Fully Connected লেয়ারে পাঠানো যায়।
  • Dense(128, activation='relu'): 128 নিউরন সহ একটি fully connected লেয়ার।
  • Dropout(0.5): 50% নিউরনকে স্যাম্পলিংয়ের সময় ড্রপ করা হবে, যাতে ওভারফিটিং কম হয়।
  • Dense(10, activation='softmax'): 10টি ক্লাসের জন্য আউটপুট লেয়ার (যদি আপনার টাস্কে ১০টি ক্লাস থাকে)।

ধাপ ৪: মডেল প্রশিক্ষণ (Model Training)

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

# ImageDataGenerator এর মাধ্যমে ডেটা প্রসেসিং এবং অগমেন্টেশন
train_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest')

test_datagen = ImageDataGenerator(rescale=1./255)

# ট্রেনিং এবং টেস্ট ডেটা লোড করা
train_generator = train_datagen.flow_from_directory(
    'path_to_train_directory',  # আপনার ট্রেনিং ডেটার ফোল্ডার পাথ
    target_size=(224, 224),
    batch_size=32,
    class_mode='categorical')

validation_generator = test_datagen.flow_from_directory(
    'path_to_validation_directory',  # আপনার ভ্যালিডেশন ডেটার ফোল্ডার পাথ
    target_size=(224, 224),
    batch_size=32,
    class_mode='categorical')

# মডেল ট্রেনিং
history = model.fit(
    train_generator,
    steps_per_epoch=train_generator.samples // train_generator.batch_size,
    epochs=10,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // validation_generator.batch_size)
  • ImageDataGenerator: ইমেজ ডেটা লোড এবং অগমেন্টেশনের জন্য ব্যবহৃত হয়।
  • flow_from_directory: আপনার ইমেজ ডেটা লোড করার জন্য ব্যবহৃত হয় (এই ফোল্ডারে সাবফোল্ডার হিসেবে ক্লাস থাকতে হবে)।
  • steps_per_epoch এবং validation_steps: প্রতি ইপোক এবং ভ্যালিডেশন স্টেপের জন্য ডেটাসেটের সাইজ অনুযায়ী এগুলো নির্ধারণ করা হয়।

ধাপ ৫: মডেল ইভালুয়েশন (Model Evaluation)

মডেল প্রশিক্ষণ শেষে, আমরা evaluate() মেথডের মাধ্যমে মডেলটির কার্যকারিতা মূল্যায়ন করতে পারি।

# মডেল ইভালুয়েশন
loss, accuracy = model.evaluate(validation_generator)
print(f"Validation Loss: {loss}")
print(f"Validation Accuracy: {accuracy}")

ধাপ ৬: ফাইন টিউনিং (Fine-Tuning)

এখন আপনি যদি চান, তবে আপনি পূর্বে লক করা লেয়ারগুলো খুলে ফাইন টিউনিং করতে পারেন। সাধারণত, base_model.trainable = True করে পূর্বের লেয়ারগুলো আবার ট্রেনিং করা হয়।

# Pre-trained model এর লেয়ারগুলো আনলক করা (ফাইন টিউনিং)
base_model.trainable = True

# শুধুমাত্র শেষে থাকা লেয়ারগুলো ট্রেনিং হবে
fine_tune_at = 100  # আপনি যেখানে ট্রেনিং শুরু করবেন

for layer in base_model.layers[:fine_tune_at]:
    layer.trainable = False

# আবার মডেল কম্পাইল করা
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

# পুনরায় মডেল ট্রেনিং করা
history_fine_tune = model.fit(train_generator, epochs=10, validation_data=validation_generator)

সারাংশ

  • Transfer Learning হল একটি শক্তিশালী কৌশল, যা প্রি-ট্রেইনড মডেল ব্যবহার করে নতুন সমস্যার জন্য কার্যকর মডেল তৈরি করতে সাহায্য করে।
  • VGG16 বা অন্যান্য জনপ্রিয় মডেল ব্যবহার করে আপনার কাস্টম ডেটাসেটের জন্য দ্রুত মডেল তৈরি করা যায়।
  • Fine-tuning এবং Freeze Layer কৌশল ব্যবহার করে আপনি কাস্টম মডেল তৈরি করতে পারেন, যা আপনার টাস্কের জন্য ভালো পারফরম্যান্স দিবে।

Transfer Learning এর মাধ্যমে আপনার মডেল প্রশিক্ষণ দ্রুত হতে পারে, কারণ এটি পূর্বে শিখে নেওয়া ফিচারগুলিকে পুনঃব্যবহার করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...