Custom Dataset তৈরি এবং ব্যবহার

PyTorch এর Dataset এবং Dataloader - পাইটর্চ (Pytorch) - Machine Learning

361

Custom Dataset তৈরি করা মেশিন লার্নিং বা ডিপ লার্নিং প্রকল্পে একটি গুরুত্বপূর্ণ পদক্ষেপ। যখন আপনার কাছে একটি নির্দিষ্ট ডেটাসেট থাকে যা PyTorch বা অন্য কোনো লাইব্রেরি দ্বারা সরাসরি সমর্থিত নয়, তখন আপনাকে নিজস্ব Custom Dataset তৈরি করতে হতে পারে। PyTorch এ, আপনি torch.utils.data.Dataset ক্লাস এক্সটেন্ড করে আপনার নিজস্ব কাস্টম ডেটাসেট তৈরি করতে পারেন।

এখানে আমরা দেখব কীভাবে একটি কাস্টম ডেটাসেট তৈরি এবং ব্যবহার করা যায়।


১. Custom Dataset তৈরি করা

PyTorch এ একটি Custom Dataset তৈরি করার জন্য আপনাকে torch.utils.data.Dataset ক্লাসটি ইনহেরিট করতে হবে এবং এর মধ্যে তিনটি মেথড ইমপ্লিমেন্ট করতে হবে:

  1. __init__(): এখানে আপনি ডেটাসেটের সমস্ত ইনিশিয়ালাইজেশন করবেন (যেমন ডেটা ফাইল লোড করা, ট্রেনিং ডেটা প্রক্রিয়া করা)।
  2. __len__(): এই মেথডটি ডেটাসেটের মোট সংখ্যা (নমুনা বা উদাহরণ) রিটার্ন করে।
  3. __getitem__(): এই মেথডটি একটি নির্দিষ্ট ইনডেক্সের ডেটা রিটার্ন করে।

Custom Dataset উদাহরণ (ইমেজ ডেটাসেট):

ধরা যাক, আপনি একটি ইমেজ ডেটাসেট তৈরি করতে চান যেখানে ছবি এবং তাদের ট্যাগ (লেবেল) থাকবে।

import torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image
import os

class CustomImageDataset(Dataset):
    def __init__(self, image_folder, transform=None):
        """
        :param image_folder: ইমেজ ফোল্ডারের পথ যেখানে ছবি এবং তাদের লেবেল থাকবে
        :param transform: কোন প্রাক-প্রসেসিং বা ট্রান্সফরমেশন থাকলে সেটি
        """
        self.image_folder = image_folder
        self.transform = transform
        # ফোল্ডারের সব ছবি ফাইলের নাম সংরক্ষণ
        self.image_names = os.listdir(image_folder)

    def __len__(self):
        # ডেটাসেটের মোট সাইজ (ছবির সংখ্যা)
        return len(self.image_names)

    def __getitem__(self, idx):
        # প্রতিটি ছবির জন্য ইনডেক্সের মাধ্যমে ছবি এবং ট্যাগ লোড করা
        img_name = os.path.join(self.image_folder, self.image_names[idx])
        image = Image.open(img_name)
        label = self.image_names[idx].split('_')[0]  # উদাহরণস্বরূপ, ছবির নাম থেকে লেবেল নিতে

        # লেবেলকে টেনসর ফরম্যাটে কনভার্ট করা (যেমন, ক্লাস নাম্বার)
        label = int(label)  # ধরুন লেবেল সংখ্যায় কনভার্ট করা

        # ট্রান্সফরমেশন (যদি থাকে) প্রয়োগ করুন
        if self.transform:
            image = self.transform(image)

        return image, label

এখানে, আমরা CustomImageDataset ক্লাস তৈরি করেছি, যা একটি ইমেজ ফোল্ডার থেকে ছবি এবং তাদের লেবেল লোড করে। __getitem__() মেথডে ছবি লোড করা হয় এবং ছবির নাম থেকে লেবেল বের করা হয় (ধরা যাক, ছবির নামের প্রথম অংশ লেবেল হিসেবে ব্যবহৃত হচ্ছে)।


২. Custom Dataset ব্যবহার করা

এখন আমরা CustomImageDataset ক্লাস ব্যবহার করে কিভাবে ডেটাসেট লোড এবং ট্রেনিং এর জন্য ব্যবহার করা যায়, তা দেখব।

ডেটাসেট ব্যবহার করা:

from torchvision import transforms
from torch.utils.data import DataLoader

# ডেটা প্রক্রিয়া করার জন্য ট্রান্সফরমেশন (যেমন রিসাইজিং এবং টেনসর কনভার্ট করা)
transform = transforms.Compose([
    transforms.Resize((128, 128)),
    transforms.ToTensor()
])

# কাস্টম ডেটাসেট তৈরি
dataset = CustomImageDataset(image_folder='/path/to/image/folder', transform=transform)

# ডেটাসেট থেকে ডেটা ব্যাচ আকারে বের করা
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

# একটি ব্যাচ ডেটা দেখানো
for images, labels in dataloader:
    print(images.shape)  # ব্যাচের আকার হবে (32, 3, 128, 128) (বাচ আকার, চ্যানেল, উচ্চতা, প্রস্থ)
    print(labels.shape)  # ব্যাচের আকার হবে (32,)
    break

এখানে আমরা DataLoader ব্যবহার করছি যা কাস্টম ডেটাসেট থেকে ডেটা ব্যাচ আকারে লোড করে। batch_size 32 সেট করা হয়েছে, এবং shuffle=True এর মাধ্যমে ডেটা শাফল করা হয়েছে যাতে প্রতিটি epoch এর সময় ডেটা ভিন্নভাবে ব্যবহৃত হয়।


৩. Custom Dataset এর সুবিধা

  1. কাস্টম ডেটা প্রসেসিং: আপনি যখন কাস্টম ডেটাসেট তৈরি করবেন, তখন আপনি নিজের ইচ্ছেমতো ডেটা প্রসেসিং করতে পারবেন, যেমন ডেটা ক্লিনিং, ফাইল লোডিং, বা ট্রান্সফরমেশন।
  2. এডভান্সড ফিচার এক্সট্রাকশন: আপনি যেকোনো ফিচার এক্সট্রাকশন কৌশল (যেমন, ছবি থেকে বৈশিষ্ট্য বের করা) ব্যবহার করতে পারেন।
  3. ডেটা অগমেন্টেশন: আপনি ডেটা অগমেন্টেশন (যেমন, রোটেশন, ফ্লিপিং) ব্যবহার করে ডেটাসেটটি আরও বৈচিত্র্যময় করতে পারবেন।

৪. প্রতিক্রিয়া

  • ছবি ডেটাসেট: উদাহরণস্বরূপ, যদি আপনি একটি চিত্র শ্রেণীবিভাগ (image classification) সমস্যা সমাধান করতে চান এবং আপনার কাছে একটি কাস্টম ইমেজ ডেটাসেট থাকে, তবে উপরের কোডটি ব্যবহার করতে পারবেন।
  • টেক্সট ডেটাসেট: টেক্সট ডেটাসেটের জন্যও একই রকমভাবে Dataset ক্লাস ব্যবহার করা যায়, তবে এখানে টেক্সট লোড এবং টোকেনাইজেশন প্রক্রিয়া যুক্ত করতে হবে।

সারাংশ

Custom Dataset তৈরি করা PyTorch এর একটি গুরুত্বপূর্ণ এবং শক্তিশালী বৈশিষ্ট্য যা আপনাকে আপনার ডেটার উপর পূর্ণ নিয়ন্ত্রণ দেয়। আপনি যখন আপনার নিজস্ব ডেটাসেট ব্যবহার করতে চান, তখন torch.utils.data.Dataset ক্লাস ইনহেরিট করে, __init__(), __len__() এবং __getitem__() মেথডগুলি ইমপ্লিমেন্ট করে কাস্টম ডেটাসেট তৈরি করতে পারেন। এটি বিশেষ করে যখন আপনার ডেটাসেট এক্সটেনশন, ট্রান্সফরমেশন, বা বিশেষ প্রক্রিয়াকরণের প্রয়োজন হয়, তখন খুবই উপকারী।

Content added By
Promotion

Are you sure to start over?

Loading...