PyTorch এ custom Dataset তৈরি করার জন্য torch.utils.data.Dataset ক্লাসটি ইনহেরিট করে একটি নতুন ক্লাস তৈরি করতে হয় এবং এতে ডেটা লোড করার জন্য প্রয়োজনীয় মেথড যেমন __len__ এবং __getitem__ ওভাররাইড করতে হয়।
এরপর এই Dataset টি DataLoader এর মাধ্যমে লোড করে মডেল training এর জন্য ডেটা batching এবং shuffling এর মতো সুবিধা পাওয়া যায়।
Custom Dataset তৈরি করা
ধরা যাক, আমাদের একটি ইমেজ ডেটাসেট রয়েছে, যেখানে প্রতিটি ইমেজ এর path এবং corresponding label আছে। আমরা এই ডেটাসেটটি PyTorch এর Dataset ক্লাস থেকে তৈরি করব।
import torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image
import os
class CustomImageDataset(Dataset):
def __init__(self, img_dir, labels, transform=None):
self.img_dir = img_dir # ইমেজ ফোল্ডারের path
self.labels = labels # লেবেলের তালিকা
self.transform = transform # ট্রান্সফর্মেশন অপশন
def __len__(self):
# মোট ইমেজ সংখ্যা রিটার্ন করবে
return len(self.labels)
def __getitem__(self, idx):
# ইমেজ এবং এর সাথে লেবেল লোড করা
img_path = os.path.join(self.img_dir, f"image_{idx}.jpg") # ধরে নেয়া হয়েছে ইমেজ নাম "image_{idx}.jpg" আকারে আছে
image = Image.open(img_path).convert("RGB") # ইমেজকে RGB ফরম্যাটে কনভার্ট করা
label = self.labels[idx]
# ট্রান্সফর্মেশন থাকলে ইমেজে প্রয়োগ করা
if self.transform:
image = self.transform(image)
return image, label
এখানে,
img_dirহলো ইমেজ ফোল্ডার যেখানে সব ইমেজ সংরক্ষিত আছে।labelsএকটি তালিকা যা প্রতিটি ইমেজ এর corresponding লেবেল ধারণ করে।transformহলো একটি অপশনাল প্যারামিটার, যেখানে ইমেজ augmentation বা normalization করা যায়।
DataLoader এর মাধ্যমে ডেটা লোড করা
DataLoader এর মাধ্যমে এই custom dataset টি ব্যবহার করে mini-batch এ ডেটা লোড করা যায়। DataLoader ডেটা batching, shuffling এবং multi-threaded loading করতে পারে।
from torchvision import transforms
# ডেটাসেট এর জন্য ট্রান্সফর্মেশন তৈরি
transform = transforms.Compose([
transforms.Resize((128, 128)), # ইমেজকে 128x128 সাইজে রিসাইজ করা
transforms.ToTensor(), # ইমেজকে টেনসরে কনভার্ট করা
])
# লেবেল লিস্ট তৈরি (উদাহরণস্বরূপ কিছু dummy labels)
labels = [0, 1, 0, 1, 0] # ৫টি ইমেজের জন্য লেবেল
# Custom Dataset initialize করা
dataset = CustomImageDataset(img_dir="path/to/images", labels=labels, transform=transform)
# DataLoader তৈরি করা
data_loader = DataLoader(dataset, batch_size=2, shuffle=True, num_workers=2)
# ডেটা লোড করে দেখা
for images, labels in data_loader:
print("Batch of images:", images.shape) # প্রতিটি batch এর image shape
print("Batch of labels:", labels) # প্রতিটি batch এর label
break # শুধু প্রথম batch টেস্ট করার জন্য break
কোড ব্যাখ্যা
transform: ইমেজকে resize এবং টেনসর ফরম্যাটে কনভার্ট করা হয়েছে যাতে এটি PyTorch মডেলে ব্যবহারযোগ্য হয়।CustomImageDataset: Custom ডেটাসেট অবজেক্ট যা ইমেজ এবং লেবেল প্রদান করবে।DataLoader: Dataset থেকে batch তৈরি করে মডেলে ডেটা পাঠানোর জন্য প্রস্তুত করে।
এভাবে DataLoader এর মাধ্যমে mini-batch লোড করার সুবিধা পাওয়া যায়, যা training এবং validation এ গুরুত্বপূর্ণ। DataLoader এর shuffle=True সেট করা হলে ডেটা এলোমেলোভাবে লোড হবে যা মডেল training এ bias কমাতে সাহায্য করে।
Read more