Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Erstellung eines Einfachen Neuronalen Netzwerks | Neuronale Netzwerke in PyTorch
Pytorch Grundlagen
course content

Kursinhalt

Pytorch Grundlagen

Pytorch Grundlagen

1. Einführung in PyTorch
2. Fortgeschrittenere Konzepte
3. Neuronale Netzwerke in PyTorch

book
Erstellung eines Einfachen Neuronalen Netzwerks

Unser Ziel ist es, ein einfaches PyTorch-Neuronales Netzwerk mit dem Digits-Datensatz zu erstellen, einem klassischen Datensatz im maschinellen Lernen. Die Aufgabe besteht darin, die Ziffer (Ziel) basierend auf dem Bild ihrer Handschrift vorherzusagen, das als eine Menge von Pixelwerten (Merkmale) dargestellt wird.

Datensatzübersicht

Der Digits-Datensatz enthält handgeschriebene Ziffernbilder, die als numerische Pixelwerte dargestellt werden. Jedes Beispiel besteht aus 64 Merkmalen, die den Pixelintensitäten eines 8×8 Graustufenbildes entsprechen. Die Zielvariable (Spalte 'target') repräsentiert die Ziffernklasse (0-9), die angibt, welche Zahl das Bild darstellt.

Der erste Schritt besteht darin, die CSV-Datei zu lesen und die Merkmale (X) und die Zielvariable (y) zu extrahieren, die das Ergebnis darstellt, das wir vorhersagen möchten:

Definition der Modellklasse

Zuerst sollten alle erforderlichen PyTorch-Module (nn, F) importiert werden. Das nn-Modul wird zur Definition von Modellschichten und Architekturen verwendet, während das F-Modul Aktivierungsfunktionen, Verlustfunktionen und andere häufig im funktionalen Stil verwendete Hilfsmittel enthält.

Wir können nun mit der Definition der Modellklasse fortfahren:

Modellarchitektur

Da es sich um eine einfache Mehrklassenklassifizierungsaufgabe handelt, ist ein Mehrschicht-Perzeptron (MLP) mit 2 versteckten Schichten ausreichend.

Wie Sie bereits wissen, besteht ein MLP aus vollständig verbundenen Schichten (auch dichte Schichten genannt), bei denen versteckte Schichten die Eingabefunktionen verarbeiten und die Ausgabeschicht die endgültigen Klassenprognosen liefert. Diese vollständig verbundenen Schichten werden in PyTorch als nn.Linear-Schichten dargestellt.

Vorwärtspropagation

Diese .forward()-Methode definiert die Vorwärtspropagation von Daten durch das Modell.

Der Eingabetensor x wird zuerst durch die erste vollständig verbundene Schicht (fc1) geleitet, gefolgt von der ReLU-Aktivierungsfunktion, um Nichtlinearität einzuführen. Anschließend durchläuft er die zweite vollständig verbundene Schicht (fc2), erneut gefolgt von ReLU.

Schließlich durchlaufen die transformierten Daten die Ausgabeschicht (out), die die Rohwerte (Logits) für die Ausgabeklassen erzeugt.

Erstellen des Modells

Da die Modellklasse nun definiert ist, können wir jetzt Modellparameter definieren und das Modell instanziieren.

Ähnlich wie bei der Anzahl der versteckten Schichten wird die Anzahl der Neuronen in jeder versteckten Schicht in unserem Beispiel etwas willkürlich gewählt: 32 und 16 für die erste bzw. zweite versteckte Schicht.

Folglich ist das resultierende Modell wie folgt strukturiert:

  • Eingabeschicht: entspricht der Anzahl der Merkmale im Datensatz (64 für diesen Datensatz);
  • Versteckte Schichten: willkürliche Neuronenanzahl (32 und 16);
  • Ausgabeschicht: entspricht der Anzahl der Klassen (10 Ziffern).

Vollständige Implementierung

12345678910111213141516171819202122232425262728293031323334
import torch.nn as nn import torch.nn.functional as F import pandas as pd digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv') # Extract features and target X = digits_df.drop(columns=["target"]).values y = digits_df["target"].values # Define the model class class DigitsClassifier(nn.Module): def __init__(self, input_features, hidden1, hidden2, output_classes): super().__init__() # Define the layers self.fc1 = nn.Linear(input_features, hidden1) # Input to first hidden layer self.fc2 = nn.Linear(hidden1, hidden2) # First hidden to second hidden layer self.out = nn.Linear(hidden2, output_classes) # Second hidden to output layer def forward(self, x): # Pass data through layers with activation functions a1 = F.relu(self.fc1(x)) # First hidden layer with ReLU a2 = F.relu(self.fc2(a1)) # Second hidden layer with ReLU output = self.out(a2) # Output layer (no activation for raw scores) return output # Define model parameters input_features = X.shape[1] # Number of features (pixels) hidden1 = 32 # Number of neurons in first hidden layer hidden2 = 16 # Number of neurons in second hidden layer output_classes = len(digits_df["target"].unique()) # Number of unique digits (0-9) # Create an instance of the model model = DigitsClassifier(input_features, hidden1, hidden2, output_classes) # Display the model structure print(model)
copy
Welche der folgenden Aussagen über die Implementierung eines neuronalen Netzwerks in PyTorch ist korrekt?

Welche der folgenden Aussagen über die Implementierung eines neuronalen Netzwerks in PyTorch ist korrekt?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 1
We're sorry to hear that something went wrong. What happened?
some-alt