Deep Learning Academy · Lekcja

Napisać własną klasę Dataset

Zaimplementować __len__ i __getitem__

Lekcja 1 z 413 kroki

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):
    pass

Przechowuj 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 = y

Dwie 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. 🎉

Bezpłatny start

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

  1. Napisać własną klasę Dataset
  2. Batchowanie, tasowanie i num_workers
  3. collate_fn dla danych o zmiennej długości
  4. Normalizowanie i standaryzowanie danych wejściowych
← Powrót do Deep Learning Academy