Whatsapp Telegram Telegram Call Anrufen

Training eines Neuronalen Netzwerks mit PyTorch


Das Training eines neuronalen Netzwerks ist ein zentraler Schritt, um Modelle zu erstellen, die aus Daten lernen und Vorhersagen treffen können. In diesem Artikel werden wir die wichtigsten Schritte und Techniken zum Training eines neuronalen Netzwerks mit PyTorch erläutern. Dazu gehören die Datenvorbereitung, das Laden von Datensätzen mit torchvision und torchtext, Datenaugmentation und -vorverarbeitung, DataLoader und Batch-Verarbeitung, die Trainingsschleife sowie die Evaluierung, Speicherung und das Laden von Modellen.

1. Vorbereitung der Daten

Die Qualität und Menge der Daten sind entscheidend für den Erfolg eines maschinellen Lernmodells. Bevor Sie mit dem Training beginnen, müssen Sie Ihre Daten vorbereiten und sicherstellen, dass sie korrekt formatiert und vorverarbeitet sind.

Laden von Datensätzen mit torchvision und torchtext
PyTorch bietet zwei wichtige Bibliotheken zum Laden und Verarbeiten von Datensätzen: torchvision für Bilddaten und torchtext für Textdaten.

Beispiel: Laden eines Bilddatensatzes mit torchvision:

import torch
import torchvision
import torchvision.transforms as transforms

# Definieren der Transformationen
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

# Laden des CIFAR-10-Datensatzes
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
                                         shuffle=False, num_workers=2)


Output:

Files already downloaded and verified
Files already downloaded and verified


Beispiel: Laden eines Textdatensatzes mit torchtext:

import torchtext
from torchtext.data import Field, TabularDataset, BucketIterator

# Definieren der Felder
TEXT = Field(tokenize='spacy', lower=True)
LABEL = Field(sequential=False, use_vocab=False)

# Laden des Datensatzes
train_data, test_data = TabularDataset.splits(
    path='.', train='train.csv', test='test.csv', format='csv',
    fields=[('text', TEXT), ('label', LABEL)]
)

# Erstellen der Iteratoren
train_iterator, test_iterator = BucketIterator.splits(
    (train_data, test_data), batch_size=32, sort_key=lambda x: len(x.text),
    sort_within_batch=False, repeat=False
)


2. Datenaugmentation und Vorverarbeitung

Datenaugmentation und Vorverarbeitung sind Techniken, um die Vielfalt der Trainingsdaten zu erhöhen und die Modelle robuster zu machen.

Beispiel: Datenaugmentation für Bilder:

# Definieren der Transformationen mit Datenaugmentation
transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomCrop(32, padding=4),
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])


Beispiel: Vorverarbeitung von Textdaten:

# Beispielhafte Tokenisierung und Text-Vorverarbeitung
TEXT = Field(tokenize='spacy', lower=True, include_lengths=True)
LABEL = Field(sequential=False, use_vocab=False)


3. DataLoader und Batch-Verarbeitung

DataLoader sind eine wesentliche Komponente in PyTorch, die es ermöglicht, Daten in Batches zu laden und effizient zu verarbeiten.

Beispiel: DataLoader für Bilder:

trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True, num_workers=2)
testloader = torch.utils.data.DataLoader(testset, batch_size=32, shuffle=False, num_workers=2)

Beispiel: DataLoader für Textdaten:

train_iterator, test_iterator = BucketIterator.splits(
    (train_data, test_data), batch_size=32, sort_key=lambda x: len(x.text),
    sort_within_batch=True, repeat=False
)


4. Trainingsschleife

Die Trainingsschleife ist der Kern des Trainingsprozesses, in dem das Modell die Daten durchläuft, die Vorhersagen trifft, den Verlust berechnet und die Gewichte aktualisiert.


Definieren der Trainingsschleife:

import torch.optim as optim
import torch.nn as nn

# Beispielhaftes Modell, Verlustfunktion und Optimierer
model = SimpleNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# Trainingsschleife
for epoch in range(10):  # Anzahl der Epochen
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data

        # Nullsetzen der Gradienten
        optimizer.zero_grad()

        # Vorwärtsausbreitung
        outputs = model(inputs)
        loss = criterion(outputs, labels)

        # Rückwärtsausbreitung und Optimierung
        loss.backward()
        optimizer.step()

        # Verlust summieren
        running_loss += loss.item()
        if i % 2000 == 1999:  # Alle 2000 Mini-Batches ausgeben
            print(f'[{epoch + 1}, {i + 1}] loss: {running_loss / 2000:.3f}')
            running_loss = 0.0

print('Finished Training')

Output:

[1, 2000] loss: 2.156
[1, 4000] loss: 1.954
[1, 6000] loss: 1.744
[1, 8000] loss: 1.601
...
Finished Training


5. Evaluierung des Modells

Nach dem Training muss das Modell evaluiert werden, um seine Leistung zu bewerten.

Beispiel: Evaluierung des Modells:

correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f'Accuracy of the network on the test images: {100 * correct / total}%')

# Output:
# Accuracy of the network on the test images: 47.6%


6. Speichern und Laden von Modellen

Es ist wichtig, trainierte Modelle zu speichern, um sie später laden und verwenden zu können.

Speichern des Modells:

# Speichern des Modells
torch.save(model.state_dict(), 'model.pth')

Laden des Modells:

# Laden des Modells
model = SimpleNN()
model.load_state_dict(torch.load('model.pth'))
model.eval()


7. Fazit

Das Training eines neuronalen Netzwerks mit PyTorch umfasst mehrere wichtige Schritte, von der Datenvorbereitung über die Implementierung der Trainingsschleife bis hin zur Evaluierung und Speicherung des Modells. Durch die Nutzung der leistungsstarken Bibliotheken und Funktionen von PyTorch können Sie effiziente und skalierbare Machine-Learning-Modelle entwickeln und einsetzen. Nutzen Sie diese Techniken und Best Practices, um Ihre Machine-Learning-Projekte erfolgreich umzusetzen.











CEO Image

Ali Ajjoub

info@ajjoub.com

Adresse 0049-15773651670

Adresse Jacob-winter-platz,1 01239 Dresden

Buchen Sie jetzt Ihren Termin für eine umfassende und individuelle Beratung.

Termin Buchen

Kontaktieren Sie uns

Lassen Sie uns K o n t a k t aufnehmen!