MXNet এ Transfer Learning এর বাস্তব উদাহরণ

Transfer Learning - অ্যাপাচি এমএক্সনেট (Apache mxnet) - Machine Learning

339

Transfer Learning হল একটি কৌশল যেখানে একটি মডেল যা ইতিমধ্যে একটি ডেটাসেটে প্রশিক্ষিত, তাকে অন্য একটি সম্পর্কিত ডেটাসেট বা টাস্কের জন্য পুনরায় প্রশিক্ষণ (fine-tuning) করা হয়। এটি সাধারণত pre-trained models ব্যবহার করে, যা দ্রুত উন্নত পারফরম্যান্স পাওয়ার জন্য উপযুক্ত।

এখানে, আমরা MXNet ব্যবহার করে একটি transfer learning উদাহরণ দেখাবো যেখানে একটি pre-trained CNN model (যেমন, ResNet-50) ব্যবহার করা হবে এবং সেটিকে Cats vs Dogs classification ডেটাসেটের জন্য fine-tune করা হবে।


ধাপ ১: প্রাথমিক সেটআপ

প্রথমে আমরা কিছু প্রয়োজনীয় লাইব্রেরি ইনস্টল করব:

pip install mxnet gluoncv matplotlib

এরপর, আমরা GluonCV লাইব্রেরি ব্যবহার করে pre-trained model লোড করব।


ধাপ ২: Cats vs Dogs ডেটাসেট প্রস্তুতি

এখানে আমরা Cats vs Dogs ডেটাসেট ব্যবহার করব। আপনি Kaggle থেকে এই ডেটাসেটটি ডাউনলোড করতে পারেন অথবা অন্য কোথাও থেকে ডেটা সংগ্রহ করতে পারেন। যদি ডেটাসেটটি ডাউনলোড করা না থাকে, তাহলে এটি ডাউনলোড করতে পারেন এবং সঠিক ডিরেক্টরিতে রাখুন:

  • train ফোল্ডারে ক্যাট এবং ডগের ছবি থাকবে।
  • validation ফোল্ডারে ভ্যালিডেশন ইমেজ থাকবে।

আপনার ডিরেক্টরি স্ট্রাকচারটি এরকম হতে পারে:

/dataset/
    /train/
        /cats/
        /dogs/
    /val/
        /cats/
        /dogs/

ধাপ ৩: Pre-trained মডেল লোড এবং ফাইন-টিউনিং

ResNet-50 বা অন্য কোনো pre-trained মডেল লোড করা এবং সেই মডেলটিকে fine-tune করা হবে।

৩.১ Pre-trained মডেল লোড করা

import mxnet as mx
from mxnet.gluon import model_zoo, nn
from mxnet.gluon.data.vision import transforms
from mxnet.gluon.data import DataLoader
import os
import numpy as np
import matplotlib.pyplot as plt
from mxnet.gluon.data.vision import datasets

# ResNet50 মডেল লোড করুন যা ImageNet ডেটাসেটে প্রশিক্ষিত
net = model_zoo.vision.resnet50_v2(pretrained=True)

# 1x1 Conv লেয়ার দিয়ে আউটপুট পরিবর্তন করুন (cats vs dogs 2 ক্লাস)
net.output = nn.Dense(2)  # দুইটি শ্রেণি (ক্যাট এবং ডগ)

# মডেল ইনিশিয়ালাইজ করা
net.output.initialize(mx.init.Xavier(), ctx=mx.cpu())

# Fine-tuning শুরু করার জন্য পুরনো প্যারামিটারগুলির লোড
net.collect_params().reset_ctx(mx.cpu())  # সমস্ত প্যারামিটার CPU তে রিসেট করা

# 5. Optimizer এবং Loss Function
from mxnet import gluon
from mxnet.gluon import loss as gloss, Trainer

loss_fn = gloss.SoftmaxCrossEntropyLoss()
trainer = Trainer(net.collect_params(), 'adam', {'learning_rate': 0.0001})

৩.২ ডেটা লোডিং এবং ট্রান্সফর্মেশন

ডেটার প্রিপ্রসেসিং ট্রান্সফর্মেশন এবং DataLoader ব্যবহার করার উদাহরণ:

# ট্রেনিং এবং ভ্যালিডেশন ডেটাসেট লোড করা
train_dataset = datasets.ImageFolderDataset('dataset/train', flag=1)  # flag=1 means RGB images
val_dataset = datasets.ImageFolderDataset('dataset/val', flag=1)

# ট্রান্সফর্মেশন সেটআপ করা (রিসাইজ এবং টেনসর ফরম্যাটে রূপান্তর)
transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# ডেটাসেট ট্রান্সফর্ম করা
train_data = train_dataset.transform(transform)
val_data = val_dataset.transform(transform)

# ডেটালোডার তৈরি করা
batch_size = 32
train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True)
val_loader = DataLoader(val_data, batch_size=batch_size, shuffle=False)

৩.৩ মডেল প্রশিক্ষণ

# প্রশিক্ষণ লুপ
epochs = 5
for epoch in range(epochs):
    total_loss = 0
    correct = 0
    total = 0
    for data, label in train_loader:
        with mx.autograd.record():
            output = net(data)
            loss = loss_fn(output, label)
        loss.backward()
        trainer.step(data.shape[0])
        
        # ক্ষতি এবং সঠিক পূর্বাভাসের সংখ্যা
        total_loss += loss.mean().asscalar()
        predictions = output.argmax(axis=1)
        correct += (predictions == label).sum().asscalar()
        total += label.shape[0]

    print(f"Epoch {epoch + 1}, Loss: {total_loss / total}, Accuracy: {correct / total * 100:.2f}%")

৩.৪ মডেল মূল্যায়ন

# মডেল মূল্যায়ন
correct = 0
total = 0
for data, label in val_loader:
    output = net(data)
    predictions = output.argmax(axis=1)
    correct += (predictions == label).sum().asscalar()
    total += label.shape[0]

accuracy = correct / total
print(f"Validation Accuracy: {accuracy * 100:.2f}%")

ধাপ ৪: Fine-tuning এবং Transfer Learning এর সুবিধা

এখন, fine-tuning প্রক্রিয়ার মাধ্যমে আমরা pre-trained ResNet-50 মডেলটিকে Cats vs Dogs ডেটাসেটের জন্য কাস্টমাইজ করেছি। এই মডেলটি ImageNet ডেটাসেটে প্রশিক্ষিত ছিল, তাই এটি ইমেজের সাধারণ বৈশিষ্ট্য যেমন এজ, টেক্সচার, আউটলাইন ইত্যাদি শিখেছে, যা আমরা Cats vs Dogs ডেটাসেটে অনায়াসে ব্যবহার করতে পারি।

Transfer Learning এর সুবিধা:

  • প্রথমিক প্রশিক্ষণ সময়ের সাশ্রয়: ImageNet বা অন্য বড় ডেটাসেট ব্যবহার করে প্রশিক্ষিত মডেলটি দ্রুত নতুন সমস্যার জন্য মানানসই হয়।
  • কম ডেটার প্রয়োজন: Transfer learning ব্যবহার করার মাধ্যমে ছোট ডেটাসেট দিয়েও ভাল পারফরম্যান্স পাওয়া যায়।
  • প্রযুক্তির উন্নতি: বড় ও শক্তিশালী pre-trained মডেল থেকে সুবিধা নিয়ে কাজ করা যায়।

সারাংশ

এখানে MXNet-এর transfer learning ব্যবহার করে একটি pre-trained ResNet-50 মডেল নিয়ে Cats vs Dogs ইমেজ ক্লাসিফিকেশন টাস্ক তৈরি করা হয়েছে। মডেলটি প্রথমে ImageNet ডেটাসেটে প্রশিক্ষিত ছিল এবং আমরা সেটিকে fine-tune করে Cats vs Dogs ডেটাসেটের জন্য কাস্টমাইজ করেছি।

Transfer Learning এর মাধ্যমে আপনি অল্প সময়ে ভালো পারফরম্যান্স পেতে পারেন, বিশেষ করে যখন ডেটাসেট ছোট হয় বা আপনার মডেল প্রশিক্ষণের জন্য পর্যাপ্ত ডেটা না থাকে।

Content added By
Promotion

Are you sure to start over?

Loading...