Custom Dataset তৈরি এবং DataLoader এর মাধ্যমে ডেটা লোড করা

Dataset এবং DataLoader - চেইনার (Chainer) - Latest Technologies

328

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 কমাতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...