Pytorchs Dataloader

Pytorchs Dataloader
Der Dataloader von Pytorch ist eine nützliche Funktion, die Ihre Daten organisiert und Ihre maschinelle Lernpipeline vereinfacht. Es ermöglicht es uns, die Daten zu iterieren, Stapel zu verwalten und die Proben zu mischen, um eine Überanpassung zu vermeiden. In diesem Artikel werden wir die Dataloader -Implementierung in Pytorch durchlaufen. Vorher werden wir die grundlegenden Terminologien durchlaufen, die wir bei der Implementierung des Datenladers verwenden werden. Wir beginnen dann mit dem mit Pytorch gebündelten Modemedatensatz des MNIST -Datensatzes. Später verwenden wir Dataloader mit unserem benutzerdefinierten Datensatz.

Was ist Pytorch?

Pytorch ist ein Open-Source-Deep-Lern-Rahmen für den Bau von Netzwerkarchitekturen und anderen hochrangigen Techniken wie RNN, CNN und LSTM. Es wird von Forschern, Unternehmen sowie ML- und AI -Gemeinschaften genutzt.

Die Forschungsgruppe für künstliche Intelligenz von Facebook ist hauptsächlich für ihre Entwicklung verantwortlich.

Was ist Tensor (Mathematik-basierter Ansatz)?

Ausüben Sie eine Kraft auf eine Oberfläche aus und beobachten Sie, wie sie sich in verschiedene Richtungen ablenkt. Sie könnten davon ausgehen, dass es sich in die gleiche Richtung wie die Kraft bewegen, aber dies geschieht nicht immer. Der Grund dafür ist, dass das Material in alle Richtungen nicht einheitlich ist; Es kann eine gewisse Struktur haben, wie z. B. einen Kristall oder Schichten. Eine Kraft, die ein Vektor ist, ist Ihr Ausgangspunkt. (Die Anweisungen X, Y und Z haben jeweils drei Komponenten.) Sie erhalten einen Ablenkvektor (Bewegung in x, y und z). Die Kraft ist jedoch in umgekehrter Richtung von der Bewegung! Stellen wir so vor, dass die Reaktion proportional zur Kraft ist, was bedeutet, dass die Kraft die zweimal der Bewegung verdoppelt. Dies nennt man eine „lineare Reaktion.”

Wie können Sie all dies in mathematische Begriffe einsetzen?? Mit einem Tensor natürlich. Betrachten Sie einen Tensor als ein mathematisches Instrument, das einen Vektor (z. B. die Kraft) einnimmt und einen neuen Vektor zurückgibt (die Bewegung). Tensoren sind nur erforderlich, wenn die beiden Vektoren in entgegengesetzte Richtungen zeigen.

Iterationen, Chargen, EPOCs. Was sind sie in Bezug auf neuronale Netze??

Die Anzahl der Iterationen (gekennzeichnet durch N hier) ist die Häufigkeit, mit der eine Reihe von Trainingsinstanzen den Gradienten schätzt und die Parameter des neuronalen Netzwerks aktualisiert.

Die Chargengröße B bezieht sich darauf, wie viele Schulungsinstanzen in einer einzigen Iteration eingesetzt werden. Dies wird normalerweise verwendet, wenn die Anzahl der Trainingsinstanzen ziemlich groß ist, und es ist normalerweise wirksam, die gesamten Daten in Mini-Stapel zu unterteilen. Jede Charge hat die Größe: 1< B < N.

Um die vollständigen Trainingsdaten einmal zu verwenden, dauert es N (N/B) Iterationen. Das ist eine Epoche. So (N/B)*E, Wo E ist die Anzahl der Epochen, ist die Gesamtzahl der Parameter, die die Parameter geändert werden.

Es gibt drei Arten von Gradientenabstiegungen. Es gibt einen Kompromiss zwischen ihnen, da man eine gute Genauigkeit geben kann, aber langsam ist. Auf der anderen Seite ist man schneller, aber es garantiert keine gute Genauigkeit:

N = b, eine Epoche entspricht einer Iteration im Stapelmodus.

Mini-Batch-Modus: 1 < B < N, with N/B iterations per epoch.

B = 1, eine Epoche nimmt N -Iterationen im stochastischen Modell des Gradientenabstiegs ein.

Implementieren von Dataloader im Modemedatensatz für modische MNIST

Laden des Modemodussatzes aus Pytorch

Fashion-Mnist ist ein Bilddatensatz, das 60.000 Trainings und 10.000 Testinstanzen enthält. Jedes Beispiel enthält ein 28 x 28 Graustufenbild mit einem Etikett aus einer von zehn Kategorien. Im Folgenden finden Sie einige Parameter, die Sie beim Laden des Datensatzes erfüllen.

Wurzel: Dies ist das Verzeichnis, in dem der Datensatz gespeichert wird.

Zug: Gibt an, dass die geschulten oder getesteten Daten geladen werden müssen.

herunterladen: Wenn die Daten bei Root nicht verfügbar sind, wird sie über das Internet heruntergeladen.

Transformation und target_transform: Diese Parameter geben die Feature- und Label -Transformationen an.

Taschenlampe importieren
Fromtorch.Utils.DataImport -Datensatz
FromTorchvisionImport -Datensätze
FromTorchvision.Transformsimporttotensor
ImportMatPlotlib.pyplotasplt
Train = Datensätze.Fashionmnist (
Root = "Daten",
Zug = wahr,
download = true,
Transformation = TOTENSOR ()
)
test = Datensätze.Fashionmnist (
Root = "Daten",
Zug = falsch,
download = true,
Transformation = TOTENSOR ()
)

Brauch Datensatz Ihrer Dateien

Importos
Pandas als PD importieren
Aus Torchvision.IO Importead_image
# Klasse für benutzerdefinierten Datensatz erstellen
clascustomDataset (Datensatz):
# Initialisieren Sie den Datensatz
Def__init __ (Selbst, Annotationen, img_dir, trans = none, target_trans = keine):
selbst.Labels = PD.read_csv (Anmerkungen)
selbst.img_dir = img_dir
selbst.trans = trans
selbst.target_trans = target_trans
# Funktion zur Rückgabe der Datenlänge
Def__len __ (Selbst):
Rückkehr (Selbst.Etiketten)
# Funktion, um ein Beispiel im Index zu erhalten
Def__GetItem __ (Selbst, Index):
Path = os.Weg.sich anschließen (Selbst.img_dir, self.Etiketten.Iloc [Index, 0])
img = read_image (Pfad)
label = self.Etiketten.Iloc [Index, 1]
wenn ich.trans:
img = self.trans (IMG)
wenn ich.target_trans:
label = self.target_trans (Etikett)
returnImg, Etikett

Im obigen Code sehen wir drei wichtige Methoden:

__drin__: Diese Funktion wird aufgerufen, wenn das Dataset -Objekt erstellt wird. Beide Transformationen sowie das Verzeichnis, das die Bilder und die Annotationsdatei enthält, werden eingerichtet.

__len__: Diese Funktion gibt Ihnen die Länge des Datensatzes oder die Anzahl der Beispiele im Datensatz zurück.

__GetItem__: Diese Methode gibt uns das in einem Index vorhandene Beispiel.

Training mit Dataloader

Speichern Sie die Daten in die Datenlader. Die Datenlader sind iterbar, sodass Sie zum Zeitpunkt des Trainings die Proben nacheinander bestehen und die Daten sogar mischen können, nachdem alle Chargen verarbeitet wurden.

Von Fackel.Utils.Daten importieren Dataloader
Train_loader = Dataloader (Zug, batch_size = 32, shuffle = true)
test_loader = dataloader (test, batch_size = 32, shuffle = true)

Iterieren Sie den Dataloader

# Bild und Etikett anzeigen.
Train_Features, Train_labels = Weiter (iter (train_loader))
Print (F "Funktionen der Form der aktuellen Stapel ist Train_Features.Größe()")
print (f "Beschriftungen Form der aktuellen Stapelform lautet Train_labels.Größe()")
IMG = Train_Features [0].quetschen()
label = train_labels [0]
PLT.IMshow (IMG, CMAP = "Gray")
PLT.zeigen()
print (f "label: label")

Ausgang

Merkmale Form der aktuellen Charge ist Taschenlampe.Größe ([32, 1, 28, 28])

Etikettenform der aktuellen Chargenform ist Taschenlampe.Größe ([32])

Etikett: 5

Jede Iteration im obigen Code gibt für jede Iteration eine Reihe von Trainingsfunktionen und Trainingsetiketten zurück. Um eine Überanpassung zu vermeiden, werden die Daten gemischt, nachdem alle Chargen verarbeitet wurden.

Implementieren des Datenladers in einem benutzerdefinierten Datensatz

# Importieren der Bibliotheken, die wir verwenden werden
Taschenlampe importieren
Fromtorch.Utils.DataImport -Datensatz
Fromtorch.Utils.DataImportDataloader
# Definieren der Datensatzklasse
ClassDatasets (Datensatz):
# Initialisieren des Datensatzes hier
Def__init __ (Selbst):
Zahlen = Liste (Bereich (0, 20, 1))
selbst.Daten = Zahlen
# Erhalten Sie hier die Länge des Datensatzes
Def__len __ (Selbst):
Rückkehr (Selbst.Daten)
# Holen Sie sich den Artikel in einem Index
Def__GetItem __ (Selbst, Index):
sich zurückkehren.Daten [Index]
# Erstellen Sie ein Objekt der Data_set -Klasse
Dataset = Datasets ()
# Implementierung des Datenladers im Datensatz und Angabe der Parameter
Dataloader = Dataloader (Dataset, batch_size = 5, shuffle = true)
FORI, Batch in Enumerate (Dataloader):
drucken (i, batch)

Ausgang

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])

Abschluss

Wir haben die Implementierung von Pytorch's Dataloader durchlaufen, um die Schulung unserer Daten zu verwalten. Wir erkennen jetzt, wie einfach wir die Chargen, das Mischen und die Iteration unserer Datensätze mit Dataloader verwalten können. Dies hilft bei der besseren Analyse unserer Modelle und verbessert sie letztendlich.