Napisać własną klasę Dataset
Zaimplementować __len__ i __getitem__
Napisać własną klasę Dataset to bezpłatna lekcja Deep Learning Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Deep Learning Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Deep Learning Academy zawiera 4 lekcji w sumie.
Dane potrzebują punktu wejścia
Zanim model będzie mógł się uczyć, PyTorch potrzebuje uporządkowanego sposobu uzyskiwania dostępu do próbek pojedynczo. Tym punktem wejścia jest klasa Dataset. 🚪
Zacznij od dziedziczenia
Niestandardowy zbiór danych tworzysz przez dziedziczenie po torch.utils.data.Dataset. Dzięki temu PyTorch dokładnie wie, jak pobierać dane z Twojego obiektu.
from torch.utils.data import Dataset
class MyData(Dataset):
passPrzechowuj dane w __init__
Metoda __init__ jest uruchamiana raz, podczas tworzenia zbioru danych. Użyj jej, aby wczytać ścieżki plików, tablice lub etykiety do pól obiektu.
def __init__(self, X, y):
self.X = X
self.y = yDwie metody wystarczą do działania
Działający zbiór danych potrzebuje tylko dwóch metod: __len__ do zwracania jego rozmiaru oraz __getitem__ do pobierania pojedynczej próbki. To cały wymagany interfejs.
__len__ zlicza próbki
Metoda __len__ zwraca liczbę dostępnych próbek. PyTorch korzysta z tej informacji, aby wiedzieć, kiedy kończy się epoka i jak daleko może sięgać indeks.
def __len__(self):
return len(self.X)__getitem__ zwraca jedną próbkę
Dla podanego indeksu metoda __getitem__ zwraca pojedynczą próbkę, zwykle cechy i odpowiadającą im etykietę. W tym miejscu przekazywany jest jeden wiersz danych.
def __getitem__(self, idx):
return self.X[idx], self.y[idx]Zwracaj tensory, nie listy
Metoda __getitem__ powinna zwracać tensory, aby model mógł od razu z nich korzystać. W razie potrzeby konwertuj tutaj tablice NumPy lub listy Pythona.
import torch
x = torch.tensor(self.X[idx], dtype=torch.float32)Leniwe wczytywanie dużych zbiorów danych
W przypadku ogromnych zbiorów danych nie wczytuj wszystkiego w __init__. Zamiast tego odczytuj każdy plik w __getitem__, aby w pamięci znajdowała się jednocześnie tylko jedna próbka.
Stosuj transformacje do każdej próbki
__getitem__ to naturalne miejsce na zastosowanie transform, na przykład zmianę rozmiaru obrazu. Zapisz transformację w __init__, a następnie wywołaj ją przed zwróceniem próbki.
if self.transform:
x = self.transform(x)Korzystaj z niego jak z listy
Po utworzeniu zbiór danych zachowuje się jak lista. Wywołanie len(ds) lub ds[0] uruchamia odpowiednio dwie zdefiniowane przez Ciebie metody. Przetestuj je przed rozpoczęciem treningu.
ds = MyData(X, y)
print(len(ds), ds[0])Teraz można go podłączyć wszędzie
Właśnie dzięki temu uporządkowanemu interfejsowi niestandardowy Dataset można bezpośrednio przekazać do DataLoader. Wystarczy napisać dwie metody, a reszta PyTorch zadziała automatycznie.
Szybkie sprawdzenie
Jaką metodę PyTorch wywołuje, aby pobrać pojedynczą próbkę na podstawie indeksu?
Podsumowanie
Niestandardowy zbiór danych dziedziczy po Dataset i definiuje dwie metody: __len__ zwracającą jego rozmiar oraz __getitem__ zwracającą jedną próbkę. Dwie metody, pełne możliwości. 🎉
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Napisać własną klasę Dataset” jest bezpłatna?
Tak — pełny tekst „Napisać własną klasę Dataset” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Deep Learning Academy, przejdź na CoddyKit PRO. Kurs Deep Learning Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Napisać własną klasę Dataset”?
Zaimplementować __len__ i __getitem__ Ćwiczysz Deep Learning Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Deep Learning Academy?
Nie wymagamy żadnego doświadczenia. Deep Learning Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Napisać własną klasę Dataset”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Deep Learning Academy?
Tak. Każda lekcja Deep Learning Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Napisać własną klasę Dataset
- Batchowanie, tasowanie i num_workers
- collate_fn dla danych o zmiennej długości
- Normalizowanie i standaryzowanie danych wejściowych