Kursinhalt
Pytorch Grundlagen
Pytorch Grundlagen
Arbeiten mit Datasets
Um die Datenvorbereitung für maschinelle Lernmodelle zu vereinfachen und eine effiziente Batch-Verarbeitung, Durchmischung und Datenhandhabung zu ermöglichen, bietet PyTorch die TensorDataset
- und DataLoader
-Utilities.
Laden und Inspizieren des Datensatzes
Wir verwenden einen Datensatz (wine.csv
), der Daten über verschiedene Weinsorten enthält, einschließlich ihrer Merkmale und entsprechenden Klassenlabels.
Zuerst laden wir den Datensatz und inspizieren seine Struktur, um die Merkmale und die Zielvariable zu verstehen:
import pandas as pd wine_df = pd.read_csv('https://content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') print(wine_df.head())
Erstellen eines TensorDataset
Der nächste Schritt besteht darin, die Merkmale und das Ziel zu trennen, sie in PyTorch-Tensoren umzuwandeln und diese Tensoren direkt zu verwenden, um ein TensorDataset
zu erstellen. Wir stellen sicher, dass die Merkmale vom Typ float32
sind (zur Verarbeitung von Gleitkommazahlen) und das Ziel vom Typ long
ist (ein 64-Bit-Ganzzahltyp, der für Labels geeignet ist).
Verwendung von DataLoader für Batch-Verarbeitung
Um Batch-Verarbeitung, Durchmischung und effizientes Laden von Daten während des Trainings zu erleichtern, wickeln wir das TensorDataset
in einen DataLoader
. Dieser Schritt ist entscheidend für die Verwaltung des Datenflusses zum Modell während des Trainings, insbesondere beim Arbeiten mit größeren Datensätzen. Der DataLoader
ermöglicht uns:
- Batch-Verarbeitung: Aufteilen der Daten in kleinere, handhabbare Stücke (Batches) für das Training, was die Speichernutzung optimiert und Gradientenaktualisierungen nach jedem Batch ermöglicht;
- Durchmischung: Zufällige Anordnung der Datenreihenfolge, was hilft, jede inhärente Ordnung in den Daten zu durchbrechen und das Modell daran hindert, falsche Muster zu lernen;
- Effizientes Laden: Automatische Handhabung des Datenabrufs und der Vorverarbeitung für jeden Batch während des Trainings, wodurch der Overhead reduziert wird.
import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') # Separate features and target features = wine_df.drop(columns='quality').values target = wine_df['quality'].values # Create TensorDataset wine_dataset = TensorDataset( torch.tensor(features, dtype=torch.float32), # Features tensor torch.tensor(target, dtype=torch.long) # Target tensor ) # Wrap the dataset in a DataLoader wine_loader = DataLoader( wine_dataset, # TensorDataset batch_size=32, # Number of samples per batch shuffle=True # Randomize the order of the data )
Mit dieser Einrichtung stellt der DataLoader
sicher, dass das Modell Daten in Batches effizient und in zufälliger Reihenfolge erhält. Dies ist besonders wichtig für das Training von neuronalen Netzwerken, da es dem Modell hilft, besser auf ungesehene Daten zu verallgemeinern.
Iteration über den DataLoader
Wir können nun über den DataLoader
iterieren, um auf Datenbatches zuzugreifen. Jeder Batch enthält ein Tupel (batch_features, batch_targets)
:
import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') # Separate features and target features = wine_df.drop(columns='quality').values target = wine_df['quality'].values # Create TensorDataset wine_dataset = TensorDataset( torch.tensor(features, dtype=torch.float32), # Features tensor torch.tensor(target, dtype=torch.long) # Target tensor ) # Wrap the dataset in a DataLoader wine_loader = DataLoader( wine_dataset, # TensorDataset batch_size=32, # Number of samples per batch shuffle=True # Randomize the order of the data ) # Iterate through batches for batch_idx, (batch_features, batch_targets) in enumerate(wine_loader): print(f"Batch {batch_idx+1}") print(f"Features: {batch_features}") print(f"Targets: {batch_targets}") print("-" * 30)
Danke für Ihr Feedback!