Pytorch's Dataloader

Pytorch's Dataloader
Il caricatore del dataloader di Pytorch è una funzionalità utile che mantiene i dati organizzati e semplifica la pipeline di apprendimento automatico. Ci consente di iterare i dati, gestire i batch e mescolare i campioni per evitare l'adattamento. In questo articolo esamineremo l'implementazione di DataLoader in Pytorch. Prima di allora, passeremo attraverso le terminologie di base che utilizzeremo durante l'implementazione del caricatore di dati. Inizieremo quindi con il set di dati MNIST Fashion in bundle con Pytorch. Successivamente, useremo DataLoader con il nostro set di dati personalizzato.

Cos'è Pytorch?

Pytorch è un quadro di apprendimento profondo open source per la costruzione di architetture di rete e altre tecniche di alto livello come RNN, CNN e LSTM. È utilizzato da ricercatori, aziende e comunità ML e AI.

Il gruppo di ricerca sull'intelligenza artificiale di Facebook è principalmente responsabile del suo sviluppo.

Cos'è il tensore (approccio basato sulla matematica)?

Esercitare una forza su una superficie e guardare come si devia in direzioni diverse. Potresti prevedere che si muova nella stessa direzione della forza, ma questo non sempre accade; La ragione di ciò è che il materiale non è uniforme in tutte le direzioni; Può avere una struttura, come un cristallo o strati. Una forza, che è un vettore, è il tuo punto di partenza. (Le direzioni X, Y e Z hanno ciascuna tre componenti.) Ricevi un vettore di deflessione (movimento in x, y e z). La forza, tuttavia, è nella direzione inversa dal movimento! Facciamo finta che la risposta sia proporzionata alla forza, che significa raddoppiando la forza del doppio del movimento. Questa è chiamata "reazione lineare."

Come puoi mettere tutto questo in termini matematici? Con un tensore, ovviamente. Considera un tensore come uno strumento matematico che prende un vettore (come la forza) e restituisce un nuovo vettore (il movimento). I tensori sono richiesti solo quando i due vettori puntano in direzioni opposte.

Iterazioni, lotti, EPOCS. Cosa sono in termini di reti neurali?

Il numero di iterazioni (indicato da N Qui) è il numero di volte in cui un lotto di istanze di allenamento stima il gradiente e aggiorna i parametri della rete neurale.

La dimensione del lotto B si riferisce a quanti istanze di formazione sono impiegati in un'unica iterazione. Questo viene generalmente utilizzato quando il numero di istanze di allenamento è piuttosto grande e di solito è efficace dividere gli interi dati in mini-batch. Ogni lotto ha le dimensioni: 1< B < N.

Per utilizzare i dati di formazione completi una volta, ci vuole N (N/B) iterazioni. Questo è ciò che è un'epoca. COSÌ (N/B)*E, Dove E è il numero di epoche, è il numero totale di volte in cui i parametri vengono modificati.

Esistono tre tipi di discesa gradiente. C'è un compromesso tra loro come si può dare una buona precisione ma è lento. D'altra parte, uno è più veloce, ma non garantisce una buona precisione:

N = b, un'epoca è uguale a un'iterazione in modalità batch.

Mono-batch in modalità: 1 < B < N, with N/B iterations per epoch.

B = 1, un'epoca prende n iterazioni nel modello stocastico di discesa gradiente.

Implementazione di DataLoader sul set di dati MNIST Fashion

Caricamento del set di dati Mnist di moda da Pytorch

Fashion-Mnist è un set di dati di immagini che include 60.000 formazione e 10.000 istanze di test. Ogni esempio include un'immagine in scala di grigi 28 con un'etichetta di una delle dieci categorie. Di seguito sono riportati alcuni parametri che soddisfano durante il caricamento del set di dati.

radice: Questa è la directory in cui viene salvato il set di dati.

treno: indica che i dati addestrati o testati devono essere caricati.

scaricamento: Se i dati non sono disponibili su root, vengono scaricati via Internet.

trasforma e target_transform: Questi parametri specificano le trasformazioni di funzionalità ed etichetta.

Torcia di importazione
datorch.utils.Set di dati di dataimport
da set di dati deltorchVisionImport
datorchvision.TransformSimportTotensor
importmatplotlib.Pyplotasplt
treno = set di dati.FashionMnist (
root = "dati",
treno = vero,
download = true,
trasform = totensor ()
)
test = set di dati.FashionMnist (
root = "dati",
treno = falso,
download = true,
trasform = totensor ()
)

Costume Set di dati dei tuoi file

importos
Importa panda come PD
da Torchvision.Io ImporTread_Image
# Crea la classe per il set di dati personalizzato
ClassCustomDataSet (set di dati):
# Inizializza il set di dati
def__init __ (self, annotations, img_dir, trans = nessuno, target_trans = nessuno):
se stesso.Etichette = PD.read_csv (annotazioni)
se stesso.img_dir = img_dir
se stesso.trans = trans
se stesso.target_trans = target_trans
# Funzione per restituire la lunghezza dei dati
def__len __ (self):
Returnlen (Self.Etichette)
# Funzione per ottenere il campione all'indice dato
def__getitem __ (self, indice):
Path = Os.sentiero.Unisciti (Self.img_dir, self.Etichette.Iloc [indice, 0])
img = read_image (percorso)
Etichetta = self.Etichette.Iloc [indice, 1]
iuSelf.trans:
img = self.trans (IMG)
iuSelf.target_trans:
Etichetta = self.target_trans (etichetta)
Returnimg, etichetta

Nel codice sopra, vediamo tre metodi importanti:

__dentro__: Questa funzione viene chiamata quando viene creato l'oggetto set di dati. Entrambe le trasformazioni, così come la directory contenente le immagini e il file delle annotazioni, sono impostate.

__len__: Questa funzione ti restituisce la lunghezza del set di dati o il numero di campioni nel set di dati.

__geTitem__: Questo metodo ci fornisce il campione presente in un indice.

Formazione con Dataloader

Archiviare i dati nei caricatori di dati. I caricatori di dati sono ipotesi che consentono di passare i campioni uno alla volta al momento dell'allenamento e persino mescolare i dati dopo che tutti i lotti sono stati elaborati.

dalla torcia.utils.Data Import DataLader
train_loader = DataLoader (treno, batch_size = 32, shuffle = true)
test_loader = DataLoader (test, batch_size = 32, shuffle = true)

Itera il caricatore del dataloader

# Visualizza immagine ed etichetta.
train_features, train_labels = next (iter (train_loader))
Print (F "Funzionalità La forma dell'attuale batch è train_features.misurare()")
Print (F "La forma delle etichette dell'attuale forma batch è train_labels.misurare()")
img = train_features [0].stretta()
etichetta = train_labels [0]
Plt.imshow (img, cmap = "grigio")
Plt.spettacolo()
print (f "etichetta: etichetta")

Produzione

Caratteristiche La forma del lotto corrente è la torcia.Dimensione ([32, 1, 28, 28])

La forma delle etichette dell'attuale forma del lotto è torcia.Dimensione ([32])

Etichetta: 5

Ogni iterazione nel codice sopra restituisce un lotto di funzionalità di formazione e etichette di formazione per ogni iterazione. Per evitare l'adattamento, i dati vengono mescolati dopo che tutti i lotti sono stati elaborati.

Implementazione del caricatore di dati su un set di dati personalizzato

# Importazione delle librerie che utilizzeremo
Torcia di importazione
datorch.utils.Set di dati di dataimport
datorch.utils.DataImportDataLoader
# Definizione della classe di set di dati
ClassDataSet (set di dati):
# Inizializzazione del set di dati qui
def__init __ (self):
numeri = elenco (intervallo (0, 20, 1))
se stesso.data = numeri
# Ottieni la lunghezza del set di dati qui
def__len __ (self):
Returnlen (Self.dati)
# Ottieni l'articolo a un indice
def__getitem __ (self, indice):
tornare.Dati [indice]
# Crea un oggetto della classe Data_set
Dataset = setAsets ()
# Implementazione del caricatore di dati sul set di dati e specificare i parametri
DataLoader = DataLoader (DataSet, batch_size = 5, shuffle = true)
fori, batch in enumerate (Dataloader):
Stampa (i, batch)

Produzione

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

Conclusione

Abbiamo esaminato l'implementazione del caricatore di dati di Pytorch per gestire la formazione dei nostri dati. Ora ci rendiamo conto di quanto facilmente possiamo gestire i lotti, la mescolanza, l'iterazione dei nostri set di dati utilizzando Dataloader. Questo aiuta in una migliore analisi dei nostri modelli e alla fine migliorali.