Напишите собственный класс набора данных
Реализуйте __len__ и __getitem__
«Напишите собственный класс набора данных» — бесплатный урок Deep Learning Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Deep Learning Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Deep Learning Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Your Data Needs a Front Door
Before a model can learn, PyTorch needs a clean way to reach your samples one at a time. That front door is a Dataset class. 🚪
Start by Subclassing
You build a custom dataset by subclassing torch.utils.data.Dataset. PyTorch then knows exactly how to ask your object for data.
from torch.utils.data import Dataset
class MyData(Dataset):
passStash Your Data in __init__
The __init__ method runs once when you create the dataset. Use it to load file paths, arrays, or labels into the object's fields.
def __init__(self, X, y):
self.X = X
self.y = yTwo Methods Make It Work
A working dataset only needs two methods: __len__ to report its size and __getitem__ to fetch one sample. That is the whole contract.
__len__ Counts Your Samples
The __len__ method returns how many samples you have. PyTorch reads this to know when an epoch ends and how far an index can go.
def __len__(self):
return len(self.X)__getitem__ Returns One Sample
Given an index, __getitem__ returns a single sample, usually a feature and its label. This is where one row of data is handed over.
def __getitem__(self, idx):
return self.X[idx], self.y[idx]Return Tensors, Not Lists
__getitem__ should hand back tensors so the model can use them directly. Convert NumPy arrays or Python lists right here if needed.
import torch
x = torch.tensor(self.X[idx], dtype=torch.float32)Lazy Loading for Big Data
For huge datasets, do not load everything in __init__. Instead read each file inside __getitem__ so only one sample sits in memory at a time.
Apply Transforms Per Sample
__getitem__ is the natural place to apply a transform, like resizing an image. Store the transform in __init__, then call it before returning.
if self.transform:
x = self.transform(x)Index It Like a List
Once built, your dataset behaves like a list. Calling len(ds) or ds[0] just triggers the two methods you defined. Test it before training.
ds = MyData(X, y)
print(len(ds), ds[0])Now It Plugs Into Everything
This tidy interface is why a custom Dataset drops straight into a DataLoader. You write two methods and the rest of PyTorch just works.
Quick Check
Which method does PyTorch call to fetch a single sample by index?
Recap
A custom dataset subclasses Dataset and defines two methods: __len__ for its size and __getitem__ to return one sample. Two methods, full power. 🎉
Часто задаваемые вопросы
Урок «Напишите собственный класс набора данных» бесплатный?
Да — полный текст урока «Напишите собственный класс набора данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Deep Learning Academy, подпишись на CoddyKit PRO. Курс Deep Learning Academy содержит 4 уроков всего.
Чему я научусь в уроке «Напишите собственный класс набора данных»?
Реализуйте __len__ и __getitem__ Ты практикуешь Deep Learning Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Deep Learning Academy?
Предыдущий опыт не требуется. Deep Learning Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Напишите собственный класс набора данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Deep Learning Academy?
Да. Каждый урок Deep Learning Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Напишите собственный класс набора данных
- Формирование пакетов, перемешивание и num_workers
- collate_fn для входных данных переменной длины
- Нормализация и стандартизация входных данных