Write a Custom Dataset Class
Implement __len__ and __getitem__.
Write a Custom Dataset Class is a free Deep Learning Academy lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Deep Learning Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
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. 🎉
Frequently asked questions
Is the “Write a Custom Dataset Class” lesson free?
Yes — the full text of “Write a Custom Dataset Class” is free to read here on the web, and the Deep Learning Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Deep Learning Academy course, upgrade to CoddyKit PRO.
What will I learn in “Write a Custom Dataset Class”?
Implement __len__ and __getitem__. You practise Deep Learning Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Deep Learning Academy?
No prior experience is required. Deep Learning Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Write a Custom Dataset Class” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Deep Learning Academy lesson?
Yes. Every Deep Learning Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Write a Custom Dataset Class
- Batching, Shuffling & num_workers
- collate_fn for Variable-Length Inputs
- Normalize and Standardize Inputs