Dataset এবং Dataloader হল PyTorch এর গুরুত্বপূর্ণ দুটি উপাদান, যা ডেটা প্রসেসিং এবং মডেল ট্রেনিংয়ের জন্য খুবই গুরুত্বপূর্ণ। PyTorch এর মধ্যে এই দুটি উপাদান সঠিকভাবে ব্যবহৃত হলে ডেটা লোডিং এবং ট্রেনিং আরও সহজ, দক্ষ এবং দ্রুত হয়।
১. Dataset এর ধারণা
Dataset হল একটি কাস্টম ক্লাস যা ইনপুট ডেটা এবং টার্গেট ডেটা (লেবেল) ধারণ করে। এটি PyTorch এর একটি মৌলিক ক্লাস torch.utils.data.Dataset থেকে ইনহেরিট করা হয়, যা ডেটাসেটের উপাদানগুলিকে কোডে সঠিকভাবে পরিচালনা করার জন্য ব্যবহৃত হয়। Dataset সাধারণত ইনপুট ডেটা যেমন চিত্র (image), টেক্সট, বা সংখ্যাসূচক ডেটা এবং তাদের সাথে সম্পর্কিত টার্গেট লেবেল ধারণ করে থাকে।
Dataset এর গঠন:
__init__: এটি ক্লাসের কন্সট্রাকটর, যা ডেটাসেট লোড এবং প্রিপ্রসেস করার জন্য ব্যবহৃত হয়।__len__: এটি ডেটাসেটের মোট সংখ্যা বা আকার (length) প্রদান করে, অর্থাৎ মোট স্যাম্পল সংখ্যা।__getitem__: এটি একটি নির্দিষ্ট ইনডেক্সের স্যাম্পল (ইনপুট এবং টার্গেট) ফিরিয়ে দেয়।
কাস্টম Dataset ক্লাস উদাহরণ:
import torch
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
# ইনপুট এবং টার্গেট (লেবেল) রিটার্ন
sample = {'data': self.data[idx], 'label': self.labels[idx]}
return sample
উপরের উদাহরণে, MyDataset ক্লাসটি একটি কাস্টম ডেটাসেট তৈরি করেছে যা ইনপুট ডেটা এবং টার্গেট লেবেল ধারণ করে। __getitem__ মেথড একটি নির্দিষ্ট ইনডেক্স থেকে ডেটা এবং লেবেল ফেরত দেয়।
২. Dataloader এর ধারণা
Dataloader একটি PyTorch ক্লাস torch.utils.data.DataLoader যা ডেটাসেট থেকে ব্যাচ আকারে ডেটা লোড করার কাজ করে। এটি ডেটার শাফলিং (shuffling), মাল্টিপল থ্রেডের মাধ্যমে ডেটা লোডিং, ব্যাচ প্রক্রিয়াকরণ ইত্যাদি অনেক সুবিধা প্রদান করে। Dataloader মডেল ট্রেনিংয়ের জন্য ডেটা প্রস্তুত করতে সাহায্য করে।
Dataloader এর কাজ:
- ব্যাচ আকারে ডেটা লোড: মডেল প্রশিক্ষণের জন্য ডেটা ব্যাচ আকারে পাঠানো হয়।
- শাফলিং (Shuffling): এটি ডেটাকে এলোমেলোভাবে মিশিয়ে দেয়, যাতে প্রতিটি epoch এ ডেটা ভিন্নভাবে ব্যবহৃত হয়।
- প্যারালাল লোডিং (Parallel Loading): মাল্টিপল থ্রেড বা প্রসেসের মাধ্যমে ডেটা দ্রুত লোড করতে সাহায্য করে।
Dataloader উদাহরণ:
from torch.utils.data import DataLoader
# উদাহরণ ডেটাসেট তৈরি
data = torch.randn(100, 3) # 100 স্যাম্পল, 3 ফিচার
labels = torch.randint(0, 2, (100,)) # 100 লেবেল, 0 বা 1
# Dataset তৈরি
dataset = MyDataset(data, labels)
# Dataloader তৈরি
dataloader = DataLoader(dataset, batch_size=16, shuffle=True)
# ব্যাচে ডেটা লোড করা
for batch in dataloader:
inputs, targets = batch['data'], batch['label']
print(inputs.size(), targets.size()) # আউটপুট: torch.Size([16, 3]) torch.Size([16])
উপরের কোডে, আমরা একটি কাস্টম MyDataset ডেটাসেট তৈরি করেছি এবং এটি DataLoader এর মাধ্যমে ব্যাচ আকারে লোড করছি। এখানে:
batch_size=16মানে প্রতিটি ব্যাচে ১৬টি স্যাম্পল থাকবে।shuffle=Trueমানে ডেটা প্রতিটি epoch এ এলোমেলোভাবে শাফল করা হবে।
৩. Dataset এবং Dataloader এর মধ্যে সম্পর্ক
- Dataset ডেটাসেটের কাঠামো এবং লেবেল প্রস্তুত করে, যেখানে ইনপুট ডেটা এবং টার্গেট লেবেল থাকে।
- Dataloader Dataset এর উপরে ভিত্তি করে কাজ করে, ব্যাচ আকারে ডেটা লোড করে এবং এটি মডেল ট্রেনিং বা পরীক্ষণ চলাকালে ডেটার শাফলিং ও লোডিং সম্পন্ন করে।
এই দুটি উপাদান একসাথে PyTorch এ ডেটা লোডিংয়ের জন্য কার্যকরীভাবে কাজ করে এবং মডেল ট্রেনিং বা টেস্টিংয়ের জন্য ডেটাকে উপযোগী করে তোলে।
৪. Dataset এবং Dataloader এর সুবিধা
- ব্যাচ লোডিং: Dataloader ব্যাচ আকারে ডেটা লোড করে, যা GPU তে মডেল ট্রেনিং দ্রুততর করে।
- শাফলিং: Dataloader ডেটা শাফল করার জন্য সহায়ক, যার মাধ্যমে প্রতিটি epoch এ ডেটা ভিন্নভাবে ব্যবহৃত হয় এবং মডেল ওভারফিটিং থেকে রক্ষা পায়।
- মাল্টিথ্রেডিং: Dataloader মাল্টিপল থ্রেড ব্যবহার করে ডেটা লোডিংয়ের গতি বাড়ায়, ফলে ট্রেনিং বা পরীক্ষণ আরও দ্রুত হয়।
সারাংশ
- Dataset ক্লাস ডেটা এবং লেবেল সংরক্ষণ করে, এবং তা পরবর্তী ব্যবহারের জন্য প্রস্তুত করে।
- Dataloader Dataset থেকে ডেটা ব্যাচ আকারে লোড করে, এবং বিভিন্ন সুবিধা যেমন শাফলিং, মাল্টিথ্রেডিং ইত্যাদি প্রদান করে।
- PyTorch এর এই দুটি উপাদান একসাথে মডেল ট্রেনিং এবং ডেটা প্রক্রিয়াকরণ অনেক সহজ এবং কার্যকরী করে তোলে।
Read more