© Pasko Maksim/Shutterstock.com
Entwicklung, Training und Deployment von neuronalen Netzwerken

Neuronale Netzwerke mit PyTorch


PyTorch [1] ist zur Zeit eins 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), dessen 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).

nguyen_pytorch_1.tif_fmt1.jpgAbb. 1: Tensoren

Das Interface für PyTorch-Tensoren lehnt sich stark an das Design von multidimensionalen Arrays in NumPy [2] 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.

Listing 1

# 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 [3], LAPACK [4] und MKL [5] e...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang