pytorch

PyTorch vs. TensorFlow: Wichtige Unterschiede, die Sie für Deep Learning kennen sollten

Stefan
14 Min Read
pytorch

Ein Vergleich der beiden beliebten Python-Frameworks.

Wenn Sie dies hier lesen, haben Sie Ihre Reise in  das Deep Learning wahrscheinlich bereits begonnen . Wenn Sie neu auf diesem Gebiet sind: Einfach ausgedrückt ist Deep Learning ein Zusatz zur Entwicklung menschenähnlicher Computer, die mit ihren speziellen gehirnähnlichen Architekturen, den sogenannten künstlichen neuronalen Netzwerken, reale Probleme lösen können. Um die Entwicklung dieser Architekturen zu unterstützen, haben Technologiegiganten wie Google, Facebook und Uber verschiedene Frameworks für die Deep-Learning-Umgebung Python veröffentlicht , die das Lernen, Erstellen und Trainieren diversifizierter neuronaler Netzwerke erleichtern.

In diesem Artikel werfen wir einen Blick auf zwei beliebte Frameworks und vergleichen sie: PyTorch vs. TensorFlow.

Was ist PyTorch?

PyTorch ist eines der neuesten Deep-Learning-Frameworks und wurde vom Team bei Facebook entwickelt und 2017 auf GitHub als Open Source veröffentlicht. Weitere Informationen zur Entwicklung finden Sie im Forschungspapier „Automatic Differentiation in PyTorch“.

PyTorch erfreut sich aufgrund seiner Einfachheit, Benutzerfreundlichkeit, dynamischen Berechnungsgrafik und effizienten Speichernutzung zunehmender Beliebtheit. Darauf werden wir später noch genauer eingehen.

Was ist TensorFlow?

TensorFlow ist ein Open-Source-Framework für Deep Learning, das von Entwicklern bei Google erstellt und 2015 veröffentlicht wurde. Die offizielle Forschung wurde in der Abhandlung „TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems“ veröffentlicht. 

TensorFlow wird heute von Unternehmen, Startups und Firmen häufig zur Automatisierung von Abläufen und Entwicklung neuer Systeme eingesetzt. Seinen guten Ruf verdankt es seiner verteilten Schulungsunterstützung, seinen skalierbaren Produktions- und Bereitstellungsoptionen und seiner Unterstützung für verschiedene Geräte wie Android.

Vor- und Nachteile von PyTorch vs. TensorFlow 

Vorteile von PyTorch:

  • Python-ähnliche Codierung.
  • Dynamische Grafik.
  • Einfache und schnelle Bearbeitung.
  • Gute Dokumentation und Community-Support.
  • Open Source.
  • Es gibt zahlreiche Projekte, die PyTorch verwenden.

Nachteile von Pytorch:

  • Drittanbieter zur Visualisierung erforderlich.
  • Für die Produktion wird ein API-Server benötigt.

Vorteile von TEnsorFlow:

  • Einfache integrierte High-Level-API.
  • Visualisierung des Trainings mit der Tensorboard-Bibliothek.
  • Produktionsbereit dank TensorFlow Serving Framework.
  • Einfacher mobiler Support.
  • Open Source.
  • Gute Dokumentation und Community-Support.

Nachteile von TensorFlow:

  • Statische Grafik.
  • Debugging-Methode.
  • Es ist schwierig, schnelle Änderungen vorzunehmen.

5 Unterschiede zwischen PyTorch und TensorFlow

Der Hauptunterschied zwischen PyTorch und TensorFlow besteht in der Art und Weise, wie sie Code ausführen. Beide Frameworks arbeiten mit dem grundlegenden Datentyp Tensor. Sie können sich einen Tensor als mehrdimensionales Array vorstellen, wie im folgenden Bild dargestellt.

1. Mechanismus: Dynamische vs. statische Graphdefinition

TensorFlow ist ein Framework, das aus zwei Kernbausteinen besteht:

  1. Eine Bibliothek zum Definieren von Berechnungsgraphen und einer Laufzeitumgebung zum Ausführen solcher Graphen auf unterschiedlicher Hardware.
  2. Ein Computergraph mit vielen Vorteilen (aber mehr dazu gleich).

Ein Berechnungsgraph ist eine abstrakte Möglichkeit, Berechnungen als gerichteten Graphen zu beschreiben. Ein Graph ist eine Datenstruktur, die aus Knoten (Eckpunkten) und Kanten besteht. Es handelt sich um eine Menge von Eckpunkten, die paarweise durch gerichtete Kanten verbunden sind. 

Wenn Sie Code in TensorFlow ausführen, werden die Berechnungsgraphen statisch definiert. Die gesamte Kommunikation mit der Außenwelt erfolgt über tf.SessionObjekte und tf.Placeholder, bei denen es sich um Tensoren handelt, die zur Laufzeit durch externe Daten ersetzt werden. Betrachten Sie beispielsweise den folgenden Codeausschnitt. 

Auf diese Weise wird ein Berechnungsgraph statisch generiert, bevor der Code in TensorFlow ausgeführt wird. Der Hauptvorteil eines Berechnungsgraphen besteht darin, dass er eine parallele oder abhängigkeitsgesteuerte Planung ermöglicht , wodurch das Training schneller und effizienter wird.

Ähnlich wie TensorFlow verfügt PyTorch über zwei Kernbausteine: 

  • Imperativer und dynamischer Aufbau von Computergraphen.
  • Autograds: Führt eine automatische Differenzierung der dynamischen Graphen durch.

Wie Sie in der Animation unten sehen können, ändern sich die Graphen und führen Knoten aus, während Sie fortfahren, ohne spezielle Sitzungsschnittstellen oder Platzhalter. Insgesamt ist das Framework enger in die Python-Sprache integriert und fühlt sich die meiste Zeit nativer an. Daher ist PyTorch eher ein pythonisches Framework und TensorFlow fühlt sich wie eine völlig neue Sprache an.

Diese unterscheiden sich in den Softwarefeldern je nach verwendetem Framework stark. TensorFlow bietet eine Möglichkeit, dynamische Diagramme mithilfe einer Bibliothek namens TensorFlow Fold zu implementieren, aber PyTorch hat diese Funktion bereits integriert.

2. Verteiltes Training

Ein Hauptmerkmal, das PyTorch von TensorFlow unterscheidet, ist die Datenparallelität. PyTorch optimiert die Leistung, indem es die native Unterstützung für die asynchrone Ausführung von Python nutzt. In TensorFlow müssen Sie jede Operation manuell codieren und feinabstimmen, damit sie auf einem bestimmten Gerät ausgeführt werden kann, um verteiltes Training zu ermöglichen. Sie können jedoch alles in TensorFlow von PyTorch replizieren, müssen dafür aber mehr Aufwand betreiben. Unten finden Sie den Codeausschnitt, der erklärt, wie einfach es ist, verteiltes Training für ein Modell in PyTorch zu implementieren.

3. Visualisierung

Wenn es um die Visualisierung des Trainingsprozesses geht, ist TensorFlow führend. Die Datenvisualisierung hilft dem Entwickler, den Trainingsprozess zu verfolgen und auf bequemere Weise zu debuggen. Die Visualisierungsbibliothek von TensorFlow heißt TensorBoard. PyTorch-Entwickler verwenden Visdom , die von Visdom bereitgestellten Funktionen sind jedoch sehr minimalistisch und begrenzt, sodass TensorBoard bei der Visualisierung des Trainingsprozesses punkten kann.

Funktionen von TensorBoard

  • Verfolgen und Visualisieren von Metriken wie Verlust und Genauigkeit.
  • Visualisierung des Berechnungsgraphen (Ops und Ebenen).
  • Anzeigen von Histogrammen von Gewichten, Biasen oder anderen Tensoren während ihrer Veränderung im Zeitverlauf.
  • Anzeige von Bildern, Texten und Audiodaten.
  • Profilieren von TensorFlow-Programmen.

Funktionen von Visdom 

  • Rückrufe behandeln.
  • Zeichnen von Diagrammen und Details.
  • Umgebungen verwalten.

4. Produktionsbereitstellung

Wenn es darum geht, trainierte Modelle in der Produktion einzusetzen, ist TensorFlow der klare Gewinner. Wir können Modelle direkt in TensorFlow einsetzen, indem wir TensorFlow Serving verwenden , ein Framework, das  die REST-Client-API verwendet.

In PyTorch sind diese Produktionsbereitstellungen einfacher zu handhaben als in der neuesten stabilen Version 1.0, es gibt jedoch kein Framework, um Modelle direkt im Web bereitzustellen. Sie müssen entweder Flask oder Django als Backend-Server verwenden. Wenn also Leistung ein Thema ist, ist die Bereitstellung über TensorFlow möglicherweise die bessere Option.

5. Definieren eines einfachen neuronalen Netzwerks in PyTorch und TensorFlow

Vergleichen wir, wie wir das neuronale Netzwerk in PyTorch und TensorFlow deklarieren.

In PyTorch ist Ihr neuronales Netzwerk eine Klasse und mithilfe des Pakets torch.nn importieren wir die erforderlichen Schichten, die zum Erstellen Ihrer Architektur erforderlich sind. Alle Schichten werden zuerst in der __init__()Methode deklariert und dann forward()definieren wir in der Methode, wie die Eingabe x an alle Schichten im Netzwerk weitergeleitet wird. Zuletzt deklarieren wir ein variables Modell und weisen es der definierten Architektur zu ( model  = NeuralNet()).

Keras, ein Framework für neuronale Netzwerke , das TensorFlow als Backend verwendet, ist in TF Repository integriert, was bedeutet, dass die Syntax zum Deklarieren von Ebenen in TensorFlow der Syntax von Keras ähnelt. Zuerst deklarieren wir die Variable und weisen sie dem Typ der Architektur zu, die wir deklarieren werden, in diesem Fall einer „ Sequential()“-Architektur. Als Nächstes fügen wir mithilfe der Methode direkt sequenziell Ebenen hinzu  model.add(). Der Ebenentyp kann tf.layerswie im folgenden Codeausschnitt gezeigt importiert werden.

Was kann mit PyTorch im Vergleich zu TensorFlow erstellt werden?

Ursprünglich wurden neuronale Netzwerke verwendet, um einfache Klassifizierungsprobleme zu lösen, wie die Erkennung handschriftlicher Ziffern oder die Identifizierung des Kennzeichens eines Autos mithilfe von Kameras. Dank der neuesten Frameworks und der leistungsstärksten Grafikprozessoren (GPUs) von NVIDIA können wir neuronale Netzwerke jedoch mit Terabyte an Daten trainieren und weitaus komplexere Probleme lösen. Zu den bemerkenswerten Erfolgen gehört das Erreichen modernster Leistung im IMAGENET-Datensatz mithilfe von Convolutional Neural Networks, die sowohl in TensorFlow als auch in PyTorch implementiert sind. Das trainierte Modell kann in verschiedenen Anwendungen verwendet werden, wie z. B. zur Objekterkennung, zur semantischen Bildsegmentierung und mehr.

Obwohl die Architektur eines neuronalen Netzwerks auf jedem dieser Frameworks implementiert werden kann, ist das Ergebnis nicht dasselbe. Der Trainingsprozess hat viele Parameter, die vom Framework abhängig sind. Wenn Sie beispielsweise einen Datensatz auf PyTorch trainieren, können Sie den Trainingsprozess mithilfe von GPUs verbessern, da diese auf CUDA (einem C++- Backend) ausgeführt werden. In TensorFlow können Sie auf GPUs zugreifen, es verwendet jedoch seine eigene integrierte GPU-Beschleunigung, sodass die Zeit zum Trainieren dieser Modelle immer je nach gewähltem Framework variiert.

Top PyTorch-Projekte 

CheXNet: Lungenentzündungserkennung auf Radiologen-Niveau auf Brust-Röntgenbildern mit Deep Learning. ( https://stanfordmlgroup.github.io/projects/chexnet/ )

PYRO : Pyro ist eine universelle probabilistische Programmiersprache (PPL), die in Python geschrieben und  auf dem Backend von PyTorch unterstützt wird. ( https://pyro.ai/ ) 

Horizon: Eine Plattform für angewandtes bestärkendes Lernen (Applied RL) ( https://horizonrl.com )

Dies sind einige Frameworks und Projekte, die auf TensorFlow und PyTorch basieren. Weitere finden Sie auf Github und den offiziellen Websites von TF und PyTorch.

Top TensorFlow-Projekte

Magenta : Ein Open-Source-Forschungsprojekt, das die Rolle des maschinellen Lernens als Werkzeug im kreativen Prozess untersucht. ( https://magenta.tensorflow.org/ ) 

Sonnet : Sonnet ist eine auf TensorFlow basierende Bibliothek zum Aufbau komplexer neuronaler Netzwerke. ( https://sonnet.dev/ )

Ludwig: Ludwig ist eine Toolbox zum Trainieren und Testen von Deep-Learning-Modellen, ohne dass Code geschrieben werden muss. ( https://uber.github.io/ludwig/ )

PyTorch vs. TensorFlow Installation und Updates 

PyTorch und TensorFlow veröffentlichen kontinuierlich Updates und neue Funktionen, die den Trainingsprozess effizienter, reibungsloser und leistungsfähiger machen.

Um die neueste Version dieser Frameworks auf Ihrem Computer zu installieren, können Sie sie entweder aus der Quelle erstellen oder von Pip aus installieren.

Installationsanweisungen finden Sie hier  für PyTorch und hier für TensorFlow.

PyTorch-Installation

●  Linux

pip3 install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cpu

●  macOS 

pip3 install torch torchvision torchaudio

●  Windows

pip3 install torch torchvision torchaudio

 

TensorFlow-Installation

●  Linux

python3 -m pip install tensorflow[and-cuda]

So überprüfen Sie die Installation: python3 -c “import tensorflow as tf’ print(tf.config.list_physical_devices(‘GPU’))”

●  macOS

python3 -m pip install tensorflow

So überprüfen Sie die Installation: python3 -c “import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000]))

●  Windows Native

conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0

#Anything above 2.10 is not supported on the GPU on Windows Native

python -m pip install “tensorflow<2.11”

So überprüfen Sie die Installation: python -c “import tensorflow as tf; print(tf.config.list_physical_devices(‘GPU’))”

●  Windows WSL 2 

python3 -m pip install tensorflow[and-cuda]

So überprüfen Sie die Installation: python3 -c “import tensorflow as tf; print(tf.config.list_physical_devices(‘GPU’))”

PyTorch vs. TensorFlow: Meine Empfehlung

TensorFlow ist eine sehr leistungsstarke und ausgereifte Deep-Learning-Bibliothek mit starken Visualisierungsfunktionen und mehreren Optionen für die Entwicklung hochrangiger Modelle. Es verfügt über produktionsreife Bereitstellungsoptionen und unterstützt mobile Plattformen. PyTorch hingegen ist noch ein junges Framework mit stärkerer Community-Bewegung und Python-freundlicher.

Wenn Sie Dinge schneller machen und KI-bezogene Produkte erstellen möchten, ist TensorFlow eine gute Wahl. PyTorch wird vor allem für forschungsorientierte Entwickler empfohlen, da es schnelles und dynamisches Training unterstützt.

Häufig gestellte Fragen

Ist PyTorch besser als TensorFlow?

Sowohl PyTorch als auch TensorFlow sind hilfreich bei der Entwicklung von Deep-Learning-Modellen und beim Trainieren neuronaler Netzwerke. Beide haben ihre eigenen Vorteile, je nachdem, an welchem ​​Machine-Learning-Projekt gearbeitet wird.

PyTorch ist ideal für Forschungs- und Kleinprojekte, bei denen Flexibilität, Experimentierfreude und schnelle Bearbeitungsfunktionen für Modelle im Vordergrund stehen. TensorFlow ist ideal für Großprojekte und Produktionsumgebungen, die leistungsstarke und skalierbare Modelle erfordern.

Lohnt es sich, PyTorch zu lernen?

PyTorch ist für alle lohnenswert, die mit Deep-Learning-Modellen experimentieren möchten und bereits mit der Python-Syntax vertraut sind. Es ist ein weit verbreitetes Framework in der Deep-Learning-Forschung und in akademischen Umgebungen. 

Lohnt es sich, TensorFlow zu lernen?

TensorFlow ist für alle interessant, die sich für voll produktionsfähige Systeme für maschinelles Lernen interessieren. Es ist ein in Unternehmen weit verbreitetes Framework zum Erstellen und Bereitstellen produktionsreifer Modelle.

Verwendet OpenAI PyTorch oder TensorFlow?

OpenAI verwendet PyTorch zur Standardisierung seines Deep-Learning-FrameworksStand 2020.