Pytorchs Dataloader

Pytorchs Dataloader
Pytorchs datalaster er en nyttig funksjon som holder dataene dine organisert og forenkler maskinlæringsrørledningen din. Det lar oss iterere dataene, administrere partier og blande prøvene for å unngå overmasse. Vi går gjennom datalasterimplementeringen i Pytorch i denne artikkelen. Før det vil vi gå gjennom de grunnleggende terminologiene som vi skal bruke mens vi implementerer datalasteren. Vi starter deretter med mote MNIST -datasettet med Pytorch. Senere vil vi bruke Dataloader med vårt tilpassede datasett.

Hva er Pytorch?

Pytorch er en åpen kildekode-ramme for å konstruere nettverksarkitekturer og andre teknikker på høyt nivå som RNN, CNN og LSTM. Det brukes av forskere, bedrifter og ML- og AI -samfunn.

Facebooks forskningsgruppe for kunstig intelligens er hovedsakelig ansvarlig for utviklingen.

Hva er Tensor (matematikkbasert tilnærming)?

Utøve en kraft på en overflate og se hvordan den avleder i forskjellige retninger. Du kan forvente at den skal bevege seg i samme retning som styrken, men dette skjer ikke alltid; Årsaken til dette er at materialet ikke er ensartet i alle retninger; Det kan ha en viss struktur, for eksempel en krystall eller lag. En kraft, som er en vektor, er utgangspunktet ditt. (Veibeskrivelsen x, y og z har tre komponenter.) Du mottar en avbøyningsvektor (bevegelse i x, y og z). Kraften er imidlertid i motsatt retning fra bevegelsen! La oss late som om responsen er proporsjonal med styrken, noe som betyr å doble styrken dobbelt så stor som bevegelsen. Dette kalles en "lineær reaksjon.”

Hvordan kan du sette alt dette i matematiske termer? Med en tensor, selvfølgelig. Tenk på en tensor som et matematisk instrument som tar en vektor (for eksempel kraften) og returnerer en ny vektor (bevegelsen). Tensorer er bare påkrevd når de to vektorene peker i motsatte retninger.

Iterasjoner, partier, epocs. Hva er de når det gjelder nevrale nettverk?

Antall iterasjoner (betegnet med n Her) er antall ganger en gruppe treningsforekomster estimerer gradienten og oppdaterer det nevrale nettverkets parametere.

Batchstørrelsen B refererer til hvor mange treningsforekomster som brukes i en enkelt iterasjon. Dette brukes vanligvis når antall treningsforekomster er ganske stort, og det er vanligvis effektivt å dele hele dataene i mini-batches. Hver batch har størrelsen: 1< B < N.

For å bruke de fullstendige treningsdataene en gang, tar det n (N/B) iterasjoner. Dette er hva en epoke er. Så (N/B)*E, hvor E er antallet epoker, er det totale antall ganger parametrene endres.

Det er tre typer gradient nedstigning. Det er en avveining mellom dem, da man kan gi en god nøyaktighet, men er treg. På den annen side er man raskere, men den garanterer ikke en god nøyaktighet:

N = b, en epoke tilsvarer en iterasjon i batchmodus.

Mini-batch-modus: 1 < B < N, with N/B iterations per epoch.

B = 1, en epoke tar n iterasjoner i den stokastiske modellen for gradient nedstigning.

Implementering av DataLoader på Fashion Mnist Dataset

Laster mote MNIST -datasettet fra Pytorch

Fashion-Mnist er et bildedatasett som inkluderer 60 000 trening og 10.000 testforekomster. Hvert eksempel inneholder et 28 x 28 gråtonebilde med en etikett fra en av ti kategorier. Nedenfor er noen parametere som du tilfredsstiller mens du laster inn datasettet.

rot: Dette er katalogen som datasettet er lagret i.

tog: indikerer at de trente eller testede dataene må lastes.

nedlasting: Hvis dataene ikke er tilgjengelige i roten, lastes de ned via Internett.

Transform og Target_Transform: Disse parametrene spesifiserer funksjonen og etiketttransformasjonene.

Importer fakkel
fromtorch.benyttede.Dataimport datasett
fromtorchVisionImport datasett
fromtorchvision.TransformSimPortTotensor
importmatplotlib.Pyplotasplt
tog = datasett.FashionMnist (
root = "data",
tog = sant,
Last ned = sant,
Transform = totensor ()
)
Test = Datasett.FashionMnist (
root = "data",
tog = falsk,
Last ned = sant,
Transform = totensor ()
)

Tilpasset Datasett for filene dine

importos
Importer pandaer som PD
fra Torchvision.IO ImportRead_Image
# Opprett klasse for tilpasset datasett
ClassCustomDataset (Dataset):
# Initialiser datasettet
def__init __ (selv, merknader, img_dir, trans = ingen, mål_trans = ingen):
selv-.Etiketter = PD.read_csv (merknader)
selv-.img_dir = img_dir
selv-.trans = trans
selv-.Target_Trans = Target_Trans
# Funksjon for å returnere dataens lengde
def__len __ (selv):
Returnlen (selv.etiketter)
# funksjon for å få prøve ved gitt indeks
def__getItem __ (selv, indeks):
sti = OS.sti.Bli med (selv.img_dir, selv.Etiketter.iloc [indeks, 0])
img = read_image (sti)
etikett = selv.Etiketter.iloc [indeks, 1]
hvis selv.trans:
IMG = selv.trans (img)
hvis selv.Target_trans:
etikett = selv.Target_trans (etikett)
Returimg, etikett

I koden ovenfor ser vi tre viktige metoder:

__i det__: Denne funksjonen kalles når datasettobjektet opprettes. Begge transformasjoner, så vel som katalogen som inneholder bildene og merknadsfilen, er satt opp.

__len__: Denne funksjonen gir deg lengden på datasettet eller antall prøver i datasettet.

__getItem__: Denne metoden gir oss prøven til stede ved en indeks.

Trening med Dataloader

Lagre dataene i datalasterne. Datalastene er iterable som lar deg passere prøvene en om gangen på treningstidspunktet og til og med stokke dataene etter at alle partier er behandlet.

fra fakkel.benyttede.Dataimport DataLoader
Train_loader = DataLoader (Train, Batch_Size = 32, Shuffle = True)
Test_loader = Dataloader (test, batch_size = 32, shuffle = true)

Itererer datalasteren

# Vis bilde og etikett.
Train_features, Train_Labels = Next (ITER (Train_Loader))
PRINT (F "har form for den nåværende batch er Train_features.størrelse()")
Print (F "Etiketter formen til den nåværende batchformen er Train_labels.størrelse()")
IMG = Train_features [0].klemme()
etikett = Train_labels [0]
plt.IMshow (img, cmap = "grå")
plt.forestilling()
print (f "etikett: label")

Produksjon

Har form på den nåværende batch er fakkel.Størrelse ([32, 1, 28, 28])

Etiketter form på den nåværende batchformen er fakkel.Størrelse ([32])

Etikett: 5

Hver iterasjon i koden ovenfor returnerer en gruppe treningsfunksjoner og treningsetiketter for hver iterasjon. For å unngå overmontering, blandes dataene etter at alle partiene er behandlet.

Implementering av datalaster på et tilpasset datasett

# Importere bibliotekene vi skal bruke
Importer fakkel
fromtorch.benyttede.Dataimport datasett
fromtorch.benyttede.DataImPortDataloader
# Definere datasettklassen
ClassDataSets (Dataset):
# Initialisere datasettet her
def__init __ (selv):
Tall = liste (rekkevidde (0, 20, 1))
selv-.data = tall
# Få lengden på datasettet her
def__len __ (selv):
Returnlen (selv.data)
# Få varen i en indeks
def__getItem __ (selv, indeks):
Returner selv.data [indeks]
# Opprett et objekt av data_setklasse
Dataset = Datasett ()
# Implementering av datalaster på datasettet og spesifiserer parametrene
Dataloader = Dataloader (Dataset, Batch_Size = 5, Shuffle = True)
Fori, Batch in Enumerate (DataLoader):
Print (I, Batch)

Produksjon

0 Tensor ([0, 4, 9, 15, 14])
1 Tensor ([11, 16, 12, 3, 10])
2 Tensor ([6, 8, 2, 17, 1])
3 Tensor ([7, 18, 5, 13, 19])

Konklusjon

Vi gikk gjennom implementeringen av Pytorchs datalaster for å administrere opplæringen av dataene våre. Vi innser nå hvor lett vi kan administrere partiene, stokking, iterasjon av datasettene våre ved hjelp av datalaster. Dette hjelper til med bedre analyse av modellene våre og til slutt forbedre dem.