Pretrained মডেল ব্যবহার করে Custom Dataset এ Train করা

Caffe2 তে Transfer Learning এবং Fine-tuning - ক্যাফে২ (Caffe2) - Machine Learning

394

প্রি-ট্রেইনড মডেল ব্যবহার করে আপনার কাস্টম ডেটাসেটে ট্রেনিং করা Transfer Learning এর অংশ। Transfer Learning হল এমন একটি কৌশল, যেখানে একটি মডেল যা অন্য একটি ডেটাসেটে প্রশিক্ষিত হয়েছে, সেটিকে ব্যবহার করা হয় এবং নতুন ডেটাসেটে ফাইন-টিউনিং (fine-tuning) করা হয়। এটি সময় ও কম্পিউটেশনাল লোড সাশ্রয় করে এবং উন্নত ফলাফল পেতে সাহায্য করে।

এখানে Keras এবং PyTorch এর সাহায্যে কাস্টম ডেটাসেটে প্রি-ট্রেইনড মডেল ব্যবহার করে ট্রেনিং করার ধাপগুলি ব্যাখ্যা করা হয়েছে।

Keras (TensorFlow) এ Pretrained মডেল ব্যবহার করে ট্রেনিং

Keras/TensorFlow এ, আমরা সাধারণত প্রি-ট্রেইনড মডেল যেমন VGG16, ResNet50, InceptionV3 ইত্যাদি ব্যবহার করি। এখানে আমরা VGG16 মডেল ব্যবহার করে কাস্টম ডেটাসেটে ট্রেনিং করার উদাহরণ দেখব।

ধাপ ১: প্রি-ট্রেইনড মডেল লোড করা

প্রথমে, TensorFlow (Keras) থেকে প্রি-ট্রেইনড মডেল লোড করতে হবে এবং ডাটাসেটে ফাইন-টিউনিং করার জন্য মডেলটির সর্বশেষ লেয়ারগুলিকে উপযুক্তভাবে পরিবর্তন করতে হবে।

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

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

# বেস মডেলকে freeze করা (ফ্রিজ করার মাধ্যমে, আমরা বেস মডেলের প্যারামিটার পরিবর্তন করবো না)
base_model.trainable = False

# কাস্টম লেয়ার যোগ করা
model = models.Sequential([
    base_model,
    layers.GlobalAveragePooling2D(),  # পুলিং লেয়ার
    layers.Dense(1024, activation='relu'),  # সম্পূর্ণভাবে সংযোগযুক্ত লেয়ার
    layers.Dense(10, activation='softmax')  # 10 ক্লাসের জন্য আউটপুট লেয়ার
])

model.summary()

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

মডেলটি কম্পাইল করার সময় অপটিমাইজার এবং লস ফাংশন নির্বাচন করতে হবে।

model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy', 
              metrics=['accuracy'])

ধাপ ৩: কাস্টম ডেটাসেট প্রস্তুত করা

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

from tensorflow.keras.preprocessing.image import 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'
)

# কাস্টম ডেটাসেট লোড করা
train_generator = train_datagen.flow_from_directory(
    'path/to/train/data',  # কাস্টম ট্রেনিং ডেটার পাথ
    target_size=(224, 224),
    batch_size=32,
    class_mode='sparse'  # ক্লাস লেবেল যদি সংখ্যা হয়ে থাকে
)

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

এখন মডেলটি কাস্টম ডেটাসেটে ট্রেন করা যাবে:

history = model.fit(
    train_generator,
    steps_per_epoch=train_generator.samples // train_generator.batch_size,
    epochs=10
)

PyTorch এ Pretrained মডেল ব্যবহার করে ট্রেনিং

PyTorch এ প্রি-ট্রেইনড মডেল ব্যবহার করে কাস্টম ডেটাসেটে ট্রেনিং করার ধাপগুলো নিচে দেওয়া হলো।

ধাপ ১: প্রি-ট্রেইনড মডেল লোড করা

PyTorch এ, আমরা torchvision.models থেকে প্রি-ট্রেইনড মডেল লোড করি।

import torch
import torch.nn as nn
import torchvision
from torchvision import transforms, datasets
from torch.utils.data import DataLoader

# ResNet18 প্রি-ট্রেইনড মডেল লোড করা
model = torchvision.models.resnet18(pretrained=True)

# সর্বশেষ লেয়ার পরিবর্তন করা (10 ক্লাসের জন্য)
model.fc = nn.Linear(model.fc.in_features, 10)

# মডেলকে GPU তে পাঠানো
model = model.to('cuda')

ধাপ ২: অপটিমাইজার এবং লস ফাংশন কনফিগার করা

import torch.optim as optim

# অপটিমাইজার ও লস ফাংশন কনফিগার করা
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()

ধাপ ৩: কাস্টম ডেটাসেট প্রস্তুত করা

PyTorch এ ডেটাসেট লোড করার জন্য ImageFolder এবং DataLoader ব্যবহার করা হয়।

# ট্রেনিং ডেটার ট্রান্সফর্ম সেটআপ করা
transform = transforms.Compose([
    transforms.Resize(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# কাস্টম ডেটাসেট লোড করা
train_dataset = datasets.ImageFolder('path/to/train/data', transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

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

# মডেল ট্রেনিং শুরু করা
for epoch in range(10):
    model.train()  # মডেলকে ট্রেনিং মোডে সেট করা
    running_loss = 0.0
    correct = 0
    total = 0
    for images, labels in train_loader:
        images, labels = images.to('cuda'), labels.to('cuda')

        optimizer.zero_grad()  # গ্রেডিয়েন্ট সাফ করা
        outputs = model(images)  # মডেল ইনফারেন্স
        loss = criterion(outputs, labels)  # লস ক্যালকুলেশন
        loss.backward()  # ব্যাকপ্রোপাগেশন
        optimizer.step()  # অপটিমাইজার স্টেপ

        running_loss += loss.item()
        _, predicted = torch.max(outputs, 1)
        correct += (predicted == labels).sum().item()
        total += labels.size(0)

    print(f"Epoch [{epoch+1}/10], Loss: {running_loss/len(train_loader):.4f}, Accuracy: {100*correct/total:.2f}%")

কী বিষয় মাথায় রাখতে হবে?

  • Frozen Layers: প্রি-ট্রেইনড মডেলের কিছু লেয়ার (বেস লেয়ারগুলো) ফ্রিজ করা (trainable=False) হতে পারে যাতে তারা পরিবর্তিত না হয়। সাধারণত বেস মডেলগুলো (যেমন VGG16, ResNet) ব্যবহার করে ফাইন-টিউনিং করা হয়।
  • Learning Rate: Pretrained মডেল ট্রেনিং করার সময় learning rate কম রাখা উচিত, কারণ মডেলটি ইতিমধ্যে কিছু শেখা আছে। খুব বড় learning rate মডেলটি ধ্বংস করতে পারে।
  • Data Augmentation: কাস্টম ডেটাসেটের জন্য ডেটা অগমেন্টেশন প্রয়োগ করা উচিত যাতে মডেল সাধারণীকরণ করতে পারে।

সারাংশ:

প্রি-ট্রেইনড মডেল ব্যবহার করে কাস্টম ডেটাসেটে ট্রেনিং করা Transfer Learning এর একটি শক্তিশালী কৌশল। এটি মডেল প্রশিক্ষণের জন্য কম সময় এবং কম্পিউটেশনাল শক্তি সাশ্রয় করে, কারণ মডেলটি ইতিমধ্যে বড় ডেটাসেটে প্রশিক্ষিত থাকে। Keras এবং PyTorch এর মাধ্যমে প্রি-ট্রেইনড মডেল ব্যবহার করে ট্রেনিং করা সহজ এবং কার্যকরী হয়।

Content added By
Promotion

Are you sure to start over?

Loading...