Transfer Learning ব্যবহার করে মডেল ট্রেনিং করার জন্য প্রি-ট্রেইন্ড মডেল (যেমন ResNet, VGG, বা MobileNet) ব্যবহার করা হয় এবং এটি নতুন ডেটাসেটে ফাইন-টিউন করা হয়। Transfer Learning মূলত প্রি-ট্রেইন্ড মডেলের ফিচারগুলোকে পুনরায় ব্যবহার করে নতুন ডেটাসেটে মডেলকে ট্রেনিং করে, যা ট্রেনিং টাইম এবং কম্পিউটেশন কমায়। নিচে PyTorch ব্যবহার করে Transfer Learning এর উদাহরণ দেওয়া হয়েছে।
উদাহরণ: Transfer Learning ব্যবহার করে ResNet মডেল ট্রেনিং
১. প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, models, transforms
from torch.utils.data import DataLoader
২. ডেটা প্রসেসিং এবং DataLoader তৈরি করা
# ডেটা ট্রান্সফর্মেশন ডিফাইন করা (ইমেজ রিসাইজ এবং নরমালাইজেশন)
transform = transforms.Compose([
transforms.Resize((224, 224)), # ইমেজকে 224x224 রিসাইজ করা
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # ImageNet এর জন্য স্ট্যান্ডার্ড নরমালাইজেশন
])
# ট্রেনিং এবং ভ্যালিডেশন ডেটাসেট লোড করা
train_dataset = datasets.CIFAR10(root='./data', train=True, transform=transform, download=True)
val_dataset = datasets.CIFAR10(root='./data', train=False, transform=transform, download=True)
# DataLoader তৈরি করা
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)
৩. প্রি-ট্রেইন্ড মডেল লোড এবং মডিফাই করা
# ডিভাইস সেট করা (GPU থাকলে CUDA, নাহলে CPU)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# প্রি-ট্রেইন্ড ResNet18 মডেল লোড করা
model = models.resnet18(pretrained=True)
# সমস্ত লেয়ারের গ্রেডিয়েন্ট ফ্রিজ করা (Feature Extraction)
for param in model.parameters():
param.requires_grad = False
# আউটপুট লেয়ার পরিবর্তন করা (CIFAR-10 এ ১০টি ক্লাস আছে)
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 10)
# মডেলকে ডিভাইসে মুভ করা
model = model.to(device)
৪. অপ্টিমাইজার এবং লস ফাংশন সেট করা
# শুধুমাত্র ফাইনাল লেয়ারের প্যারামিটার ট্রেনিং হবে
optimizer = optim.SGD(model.fc.parameters(), lr=0.001, momentum=0.9)
# ক্রস এন্ট্রপি লস ফাংশন ব্যবহার করা
criterion = nn.CrossEntropyLoss()
৫. ট্রেনিং লুপ
num_epochs = 5
for epoch in range(num_epochs):
model.train() # ট্রেনিং মোডে সেট করা
running_loss = 0.0
for images, labels in train_loader:
images, labels = images.to(device), labels.to(device)
# ফরওয়ার্ড পাস
outputs = model(images)
loss = criterion(outputs, labels)
# ব্যাকওয়ার্ড পাস এবং অপ্টিমাইজেশন
optimizer.zero_grad()
loss.backward()
optimizer.step()
running_loss += loss.item()
print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader):.4f}")
৬. ভ্যালিডেশন লুপ
model.eval() # ইভালুয়েশন মোডে সেট করা
correct = 0
total = 0
with torch.no_grad():
for images, labels in val_loader:
images, labels = images.to(device), labels.to(device)
outputs = model(images)
_, predicted = torch.max(outputs, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = 100 * correct / total
print(f'Validation Accuracy: {accuracy:.2f}%')
ব্যাখ্যা:
প্রি-ট্রেইন্ড মডেল লোড এবং মডিফাই:
models.resnet18(pretrained=True)দিয়ে প্রি-ট্রেইন্ড ResNet-18 মডেল লোড করা হয়েছে।- মডেলের সব লেয়ারের গ্রেডিয়েন্ট ফ্রিজ করা হয়েছে যাতে শুধু ফাইনাল ক্লাসিফিকেশন লেয়ারটি ট্রেনিং হয়।
- নতুন ডেটাসেটের সাথে মিলিয়ে ফাইনাল লেয়ারটি পরিবর্তন করা হয়েছে।
অপ্টিমাইজার এবং লস ফাংশন:
- শুধুমাত্র ফাইনাল লেয়ার ট্রেনিং হচ্ছে, তাই
model.fc.parameters()ব্যবহার করে ফাইনাল লেয়ারের প্যারামিটারগুলো অপ্টিমাইজারের সাথে যুক্ত করা হয়েছে। nn.CrossEntropyLoss()ব্যবহার করে লস ফাংশন সেট করা হয়েছে।
ট্রেনিং এবং ভ্যালিডেশন লুপ:
- ট্রেনিং লুপে মডেলের ফিচার এক্সট্রাকশন লেয়ারগুলো লক থাকছে এবং শুধু ফাইনাল লেয়ার আপডেট হচ্ছে।
- ভ্যালিডেশন লুপে মডেলকে ইভালুয়েশন মোডে (
model.eval()) সেট করা হয় এবং আউটপুটের সাথে আসল লেবেলের মিল চেক করা হয়।
টিপস:
- Feature Extraction এবং Fine-tuning এর মাধ্যমে মডেল ট্রেনিং দ্রুত করা যায় কারণ প্রি-ট্রেইন্ড মডেলের ফিচারগুলো পুনরায় ব্যবহার করা হয়।
- মডেল ফাইন-টিউন করতে চাইলে মডেলের নির্দিষ্ট লেয়ারগুলো আনফ্রিজ করা যায়, যেমন: শেষের কিছু কনভলিউশন লেয়ার।
এইভাবে, Transfer Learning ব্যবহার করে দ্রুত এবং কার্যকরভাবে নতুন ডেটাসেটে মডেল ট্রেনিং করা যায়।
Content added By
Read more