Chi Nhan Nguyen itemis AG

„Mit PyTorch kann man sehr effizient und elegant sowohl einfache als auch sehr komplexe Neuronale Netzwerke entwickeln und trainieren. Durch die Implementierung dynamischer Graphen ist das Experimentieren mit sehr flexiblen Architekturen und der Einsatz von Standarddebuggingtools kein Problem.“

PyTorch ist zur Zeit eines der populärsten Frameworks zur Entwicklung und zum Trainieren von neuronalen Netzwerken. Es zeichnet sich vor allem durch seine hohe Flexibilität und die Möglichkeit aus, Standard-Python-Debugger einzusetzen. Dabei müssen keinerlei Abstriche bezüglich der Trainingsperformance gemacht werden.

Aufgrund der genannten Eigenschaften ist PyTorch vor allem bei Deep-Learning-Forschern und bei Entwicklern im Bereich Natural Language Processing (NLP) sehr beliebt. Auch im Bereich Integration und Deployment wurden in der letzten Version, dem ersten offiziellen Release 1.0, wesentliche Neuerungen eingeführt.

Tensoren

Die elementare Datenstruktur zur Repräsentation und Verarbeitung von Daten in PyTorch ist torch.Tensor. Der mathematische Begriff Tensor steht für eine Generalisierung von Vektoren und Matrizen. In PyTorch werden Tensoren in Form von multidimensionalen Arrays implementiert. Ein Vektor ist dabei nichts anderes als ein eindimensionaler Tensor (oder ein Tensor mit Rang 1), deren Elemente Zahlen eines bestimmten Datentyps (z. B. torch.float64 oder torch.int32) sein können. Eine Matrix ist somit ein zweidimensionaler Tensor (Rang 2) und ein Skalar ein nulldimensionaler Tensor (Rang 0). Tensoren noch höherer Dimensionen besitzen keine speziellen Namen mehr (Abb. 1).

Abb. 1: Tensoren

Abb. 1: Tensoren

Das Interface für PyTorch-Tensoren lehnt sich stark an das Design von multidimensionalen Arrays in NumPy an. Genauso wie NumPy stellt PyTorch vordefinierte Methoden bereit, mit denen man Tensoren manipulieren und Operationen der linearen Algebra durchführen kann. Einige Beispiele sind in Listing 1 dargestellt.

# Generierung eines eindimensionalen Tensors mit 
# 8 (uninitialisierten) Elementen (float32)
x = torch.Tensor(8)
x.double()  # Konvertierung nach float64 Tensor
x.int()     # Konvertierung nach int32 Datentyp

# 2D-Long-Tensor vorinitialisiert mit Nullen
x = torch.zeros([2, 2])

# 2D-Long-Tensor vorinitialisiert mit Einsen 
# und anschließende Konvertierung nach int64
y = torch.ones([2, 3]).long()

# Zusammenfügen zweier Tensoren entlang Dimension 1
x = torch.cat([x, y], 1)  

x.sum()  # Summe über alle Elemente
x.mean() # Durchschnitt über alle Elemente

# Matrixmultiplikation
x.mm(y)

# Transponieren
x.t()

# Inneres Produkt zweier Tensoren
torch.dot(x, y) 

# Berechnet Eigenwerte und -vektoren
torch.eig(x)

# Gibt Tensor mit dem Sinus der Elemente zurück
torch.sin(x)

Die Anwendung optimierter Bibliotheken wie BLAS, LAPACK und MKL erlaubt eine höchst performante Ausführung von Tensoroperationen auf der CPU (vor allem mit Intel-Prozessoren). Zusätzlich unterstützt PyTorch (im Gegensatz zu NumPy) auch die Ausführung der Operationen auf NVIDIA-Grafikkarten mit Hilfe des CUDA-Toolkits und der CuDNN-Bibliothek.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Entwickler Magazin 4.19 - "HTTP/3"

Alle Infos zum Heft
579895419Neuronale Netzwerke mit PyTorch
X
- Gib Deinen Standort ein -
- or -