[Schnelles Lernen] Einführung in Pytorch (XNUMX): Implementieren Sie die MLP-Regression und lernen Sie die Grundlagen von PyTorch

Das letzte Mal habe ich überprüft, wie man mit Fackeln umgeht, die die Basis von PyTorch bilden.

Dieses Mal möchte ich die MLP-Regression (Multilayer Perceptron) in PyTorch implementieren und die wichtigsten PyTorch-Pakete sehen.

Gesamtdurchfluss

Der Gesamtablauf der Modellimplementierung ist wie folgt. Die Zahlen in Klammern sind die zu diesem Zeitpunkt verwendeten PyTorch-Pakete.

  • Erstellung von Eingabedatensätzen, iterative Verarbeitung (Datensatz, Dataloader)
  • Definition des neuronalen Netzwerks (nn.Module)
  • Verlustberechnung, Gradient, der auf Netzwerkparameter übertragen wird (nn.Module)
  • Netzwerkgewichte aktualisieren (Optimaizer)

Wichtige PyTorch-Pakete

Unabhängig von PyTorch bieten viele Deep-Learning-Frameworks verschiedene Pakete an, um die Implementierung zu vereinfachen. Die Hauptelemente in PyTorch sind:

fackel.tensorMehrdimensionales Array. In PyTorch verwendete Datenstruktur.
fackel.autogradImplementieren Sie Forward / Backpropagation.Unterstützt die automatische Differenzierungsoperation für Tensor, z. B. die Rückausbreitung (rückwärts ()).
brenner.utils.dataEs enthält Dienstprogramme wie "Dataset", das die einzugebenden Daten und deren Bezeichnung als Satz sammelt, und "Dataloader", der Daten aus dem Dataset in einem Mini-Batch extrahiert und an das Modell weitergibt.
Taschenlampe.nn.ModulWird zum Aufbau neuronaler Netze verwendet.Verantwortlich für die Parameterkapselung wie das Speichern und Laden von Modellen und die Umstellung auf die GPU.
fackel.optimErmöglicht die Verwendung von Parameteroptimierungsalgorithmen wie SDG und Adam.
Wichtige PyTorch-Pakete

Modellimplementierung

Erstellen eines Datensatzes

Dieses Mal werden wir sin (5x) plus Zufallszahlen als Übungsdaten mit numpy vorbereiten.from_numpy()Konvertieren Sie in torch.tensor mit.

Modelldefinition

In pytorch wird das Modell als "Python-Klasse" definiert, die von der nn.Module-Klasse erbt.

Klasse MLP (nn.Module): Die definierte MLP-Klasse erbt von der übergeordneten Klasse nn.Module
def init (): Empfängt Argumente und instanziiert
super (MLP, self) .init (): Übergeordnete Klasse mit Superfunktion erben
def vorwärts (self, x): Funktioniert, wenn die Funktion nach der Instanziierung aufgerufen wird. Wenn Sie die Vorwärtsfunktion definieren, wird auch die Rückwärtsfunktion (Gradientenberechnung) automatisch definiert.

.parameters()Sie können die Struktur und Parameter des Netzwerks mit abrufen.

Verlustberechnung / Backpropagation / Gewichtsaktualisierung

Um das individuelle Verhalten zu verstehen, nehmen wir ein Datenelement von x und geben es in das neuronale Netzwerk ein, um zu sehen, wie sich die Parameter aufgrund von Fehlerberechnungen und Gewichtsaktualisierungen ändern.

Versuchen Sie, die Lernschleife zu drehen

Führen Sie den obigen Ablauf für jede Charge aus, um das neuronale Netzwerk zu trainieren.
DatasetGibt einen Datensatz und das entsprechende Etikett zurück.DataLoaderIst eine Klasse, die Daten in Stapelgröße zurückgibt.

Visualisierung des Berechnungsgraphen

Die Struktur des diesmal erstellten 3-Layer-MLP kann mithilfe eines Python-Pakets namens torchviz visualisiert werden.parameters()Bitte wenn es nicht reicht.

Bisher haben wir PyTorch und seine wichtigsten PyTorch-Pakete durch die Implementierung der MLP-Regression identifiziert.