Oppikaa tekoälyä Pythonilla · Oppitunti

Mukautetut Datasetit ja DataLoaderit

torch.utils.data.Dataset, __len__/__getitem__, DataLoader, muunnokset, augmentointi.

Oppitunti 2/413 vaihetta

Mukautetut Datasetit ja DataLoaderit on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Datan syöttäminen mallille

Mallin kouluttaminen edellyttää tehokasta tapaa lukea, muuntaa ja ryhmitellä dataa eriksi. PyTorch tarjoaa kaksi abstraktiota: Dataset tietää, miten yksittäinen näyte noudetaan, ja DataLoader kokoaa näytteet eriksi sekä sekoittaa ne.

from torch.utils.data import Dataset, DataLoader

Dataset-rajapinta

Mukautetun Dataset-aliluokan on toteutettava kaksi metodia: __len__ kertoo näytteiden määrän ja __getitem__ palauttaa tietyn indeksin kohdalla olevan näytteen. PyTorch kutsuu näitä metodeja datan noutamiseen.

__len__:n toteuttaminen

__len__ kertoo PyTorchille aineiston koon, jotta se tietää käytettävissä olevien indeksien määrän ja sen, kuinka monta erää yksi epookki sisältää.

class ImageDataset(Dataset):
    def __init__(self, paths, labels):
        self.paths = paths
        self.labels = labels

    def __len__(self):
        return len(self.paths)

__getitem__:n toteuttaminen

__getitem__ lataa ja palauttaa yhden näytteen sekä sen luokan indeksin perusteella. Tässä kohdassa esimerkiksi kuvatiedosto avataan ja muunnetaan tensoriksi.

from PIL import Image

    def __getitem__(self, idx):
        img = Image.open(self.paths[idx]).convert("RGB")
        label = self.labels[idx]
        return img, label

Miksi Transforms?

Raakakuvien koko ja pikseliarvot vaihtelevat. Transforms-muunnokset yhdenmukaistavat kuvat: niiden koko muutetaan vakioksi, ne muunnetaan tensoriksi ja pikseliarvot normalisoidaan, jotta malli oppii vakaasti.

from torchvision import transforms

transforms.Compose

transforms.Compose ketjuttaa useita muunnoksia yhdeksi putkeksi, joka suoritetaan järjestyksessä. Tyypillinen ketju on Resize, sitten ToTensor ja lopuksi Normalize.

tf = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225])
])

Transform-muunnosten ymmärtäminen

Resize määrittää tilallisen koon; ToTensor muuntaa PIL-kuvan tensoriksi ja skaalaa pikselit välille [0,1]; Normalize siirtää ja skaalaa kunkin kanavan niin, että sen keskiarvo on nolla ja varianssi yksi, mikä nopeuttaa konvergenssia.

Muunnosten käyttäminen Datasetissa

Välitä muunnos Datasetille ja käytä sitä __getitem__-metodin sisällä, jotta jokainen näyte esikäsitellään yhdenmukaisesti noudon yhteydessä.

class ImageDataset(Dataset):
    def __init__(self, paths, labels, transform):
        self.paths, self.labels, self.transform = paths, labels, transform

    def __getitem__(self, idx):
        img = Image.open(self.paths[idx]).convert("RGB")
        return self.transform(img), self.labels[idx]

Datasetin kääriminen DataLoaderiin

DataLoader muuttaa Datasetin iteroitavaksi erien kokoelmaksi. Määritä batch_size hallitaksesi yhden askeleen näytemäärää ja aseta shuffle=True, jotta järjestys satunnaistetaan jokaisella epookilla. Tämä on tärkeää koulutuksessa.

dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)

num_workers nopeuttamiseen

num_workers käynnistää rinnakkaisia aliprosesseja datan lataamista ja muuntamista varten samalla, kun GPU kouluttaa mallia, jolloin I/O-viive jää piiloon. Esimerkiksi arvo 4 pitää GPU:n usein jatkuvasti käytössä sen sijaan, että se joutuisi odottamaan.

loader = DataLoader(
    dataset,
    batch_size=32,
    shuffle=True,
    num_workers=4
)

Erien läpikäynti

Käy DataLoader silmukassa läpi saadaksesi erissä olevia tensoreita. Jokainen iteraatio palauttaa parin (images, labels), jossa images-tensorin muoto on [batch_size, channels, H, W] ja joka on valmis syötettäväksi mallille.

for images, labels in loader:
    print(images.shape)  # torch.Size([32, 3, 224, 224])
    break

Pikatarkistus

Testaa datan käsittelyputkea koskevat tietosi.

Kertaus: Datasetit ja DataLoaderit

Rakensit mukautetun Dataset-luokan metodeilla __len__ ja __getitem__, esikäsittelit kuvat komennolla transforms.Compose (Resize, ToTensor, Normalize) ja kääräisit sen DataLoader-olioon, jossa käytit asetuksia batch_size, shuffle ja num_workers erien tehokkaaseen syöttämiseen mallille.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
53
Oppitunnit
225

Usein kysytyt kysymykset

Onko oppitunti ”Mukautetut Datasetit ja DataLoaderit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “Mukautetut Datasetit ja DataLoaderit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Mukautetut Datasetit ja DataLoaderit”?

torch.utils.data.Dataset, __len__/__getitem__, DataLoader, muunnokset, augmentointi. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Mukautetut Datasetit ja DataLoaderit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?

Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. PyTorch-tensorit ja Autograd
  2. Mukautetut Datasetit ja DataLoaderit
  3. CNN-verkkojen rakentaminen ja kouluttaminen PyTorchilla
  4. Kohteiden tunnistus YOLOv8:lla
← Takaisin: Oppikaa tekoälyä Pythonilla