PyTorch এ custom dataset তৈরি করার জন্য torch.utils.data.Dataset ক্লাসটি ইনহেরিট করে একটি নতুন dataset ক্লাস তৈরি করতে হয়। এই ক্লাসের মাধ্যমে ডেটা এবং তার লেবেলগুলো ইনডেক্স করে সহজে এক্সেস করা যায়। এখানে একটি উদাহরণসহ custom dataset তৈরি করা দেখানো হলো।
ধরা যাক, আমাদের একটি ডেটাসেট রয়েছে যেখানে টেক্সট ফাইল থেকে ডেটা লোড করতে হবে, এবং প্রতিটি টেক্সট এর সাথে একটি লেবেল (positive বা negative sentiment) যুক্ত থাকবে।
ধাপ ১: Dataset তৈরি করা
আমরা একটি TextDataset নামের custom dataset ক্লাস তৈরি করব। এখানে প্রতিটি টেক্সট এবং তার সাথে একটি লেবেল সংরক্ষিত থাকবে।
import torch
from torch.utils.data import Dataset
class TextDataset(Dataset):
def __init__(self, texts, labels, transform=None):
"""
texts (list of str): টেক্সট ডেটা লিস্ট হিসেবে থাকবে
labels (list of int): টেক্সটের corresponding লেবেল (0 বা 1)
transform (callable, optional): Transform অ্যাপ্লাই করার অপশন
"""
self.texts = texts
self.labels = labels
self.transform = transform
def __len__(self):
# ডেটাসেটের মোট নমুনা সংখ্যা
return len(self.texts)
def __getitem__(self, idx):
# নির্দিষ্ট ইনডেক্সের টেক্সট এবং লেবেল ফেরত দেয়
text = self.texts[idx]
label = self.labels[idx]
# transform থাকলে তা অ্যাপ্লাই করা হয়
if self.transform:
text = self.transform(text)
return text, label
ধাপ ২: উদাহরণ হিসেবে কিছু ডেটা তৈরি করা
এখন আমরা কিছু উদাহরণ হিসেবে টেক্সট এবং তার লেবেল তৈরি করব, এবং এই ডেটা TextDataset ক্লাসে ব্যবহার করব।
# উদাহরণ হিসেবে টেক্সট এবং লেবেল ডেটা তৈরি
texts = [
"I love this product, it is fantastic!",
"This is the worst experience I've had.",
"Absolutely wonderful service and support.",
"I am very disappointed with the quality.",
"Excellent quality and fast delivery!"
]
labels = [1, 0, 1, 0, 1] # 1: positive sentiment, 0: negative sentiment
ধাপ ৩: Dataset Initialize করা
আমরা TextDataset এর একটি instance তৈরি করব যেখানে texts এবং labels ব্যবহার করা হবে।
# Dataset instance তৈরি
dataset = TextDataset(texts=texts, labels=labels)
ধাপ ৪: Dataset থেকে ডেটা অ্যাক্সেস করা
এখন আমরা dataset এর item গুলোতে এক্সেস করতে পারি এবং প্রতিটি টেক্সট এবং তার লেবেল দেখতে পারি।
# ডেটাসেটের প্রতিটি আইটেম প্রিন্ট করা
for i in range(len(dataset)):
text, label = dataset[i]
print(f"Text: {text}")
print(f"Label: {label}\n")
আউটপুট:
এটি চলানোর ফলে আউটপুটটি নিম্নরূপ হতে পারে:
Text: I love this product, it is fantastic!
Label: 1
Text: This is the worst experience I've had.
Label: 0
Text: Absolutely wonderful service and support.
Label: 1
Text: I am very disappointed with the quality.
Label: 0
Text: Excellent quality and fast delivery!
Label: 1
ধাপ ৫: DataLoader ব্যবহার করা (ঐচ্ছিক)
এখন আমরা এই dataset টি DataLoader এর মাধ্যমে mini-batches আকারে লোড করতে পারি।
from torch.utils.data import DataLoader
# DataLoader তৈরি করা
data_loader = DataLoader(dataset, batch_size=2, shuffle=True)
# DataLoader থেকে ব্যাচ লোড করা এবং দেখানো
for batch in data_loader:
texts, labels = batch
print("Batch of Texts:", texts)
print("Batch of Labels:", labels)
ব্যাখ্যা:
- Texts: টেক্সট ডেটার একটি লিস্ট বা আরে, যা প্রতিটি টেক্সট এবং তার সাথে সংযুক্ত লেবেল প্রদান করে।
- Labels: টেক্সটের sentiment অনুযায়ী লেবেল প্রদান করা হয়েছে (১ মানে positive, ০ মানে negative)।
- DataLoader:
batch_size=2ব্যবহার করা হয়েছে, যাতে প্রতি ব্যাচে ২টি করে টেক্সট এবং লেবেল লোড হয় এবংshuffle=Trueকরে ডেটাকে এলোমেলোভাবে সাজানো হয়েছে।
এই কোডের মাধ্যমে আমরা custom dataset এবং DataLoader এর মাধ্যমে ডেটা লোড করার পুরো প্রক্রিয়া সহজে করতে পারি।
Read more