TensorFlow ist eine Python-freundliche Open-Source-Bibliothek für numerische Berechnungen, die maschinelles Lernen und die Entwicklung neuronaler Netzwerke schneller und einfacher macht.
Maschinelles Lernen ist eine komplexe Disziplin. Aber die Implementierung von maschinellen Lernmodellen ist weit weniger entmutigend als früher, dank maschineller Lern-Frameworks wie TensorFlow von Google, die den Prozess der Datenerfassung, des Trainings von Modellen, der Bereitstellung von Vorhersagen und der Verfeinerung zukünftiger Ergebnisse erleichtern.
TensorFlow ist eine Open-Source-Bibliothek für numerische Berechnungen und maschinelles Lernen in großem Maßstab, die vom Google Brain-Team entwickelt und 2015 erstmals der Öffentlichkeit zugänglich gemacht wurde. TensorFlow bündelt eine Reihe von Machine-Learning- und Deep-Learning-Modellen und -Algorithmen (auch bekannt als neuronale Netze) und macht sie durch gemeinsame programmatische Metaphern nutzbar. Es verwendet Python oder JavaScript, um eine bequeme Front-End-API für die Erstellung von Anwendungen bereitzustellen, während diese Anwendungen in leistungsstarkem C++ ausgeführt werden.
TensorFlow, das mit Frameworks wie PyTorch und Apache MXNet konkurriert, kann tiefe neuronale Netze für die Klassifizierung handgeschriebener Ziffern, Bilderkennung, Worteinbettungen, rekurrente neuronale Netze, Sequenz-zu-Sequenz-Modelle für die maschinelle Übersetzung, die Verarbeitung natürlicher Sprache und PDE (partielle Differentialgleichung)-basierte Simulationen trainieren und ausführen. Das Beste von allem ist, dass TensorFlow die Produktionsvorhersage in großem Umfang unterstützt, mit denselben Modellen, die für das Training verwendet werden.
TensorFlow hat auch eine breite Bibliothek von vortrainierten Modellen, die in Ihren eigenen Projekten verwendet werden können. Sie können auch Code aus dem TensorFlow Model Garden als Beispiele für Best Practices zum Trainieren Ihrer eigenen Modelle verwenden.
Wie TensorFlow funktioniert
TensorFlow ermöglicht es Entwicklern, Datenflussgraphen zu erstellen - Strukturen, die beschreiben, wie sich Daten durch einen Graphen oder eine Reihe von Verarbeitungsknoten bewegen. Jeder Knoten im Graphen stellt eine mathematische Operation dar, und jede Verbindung oder Kante zwischen Knoten ist ein mehrdimensionales Datenfeld oder ein Tensor.
TensorFlow-Anwendungen können auf fast jedem geeigneten Ziel ausgeführt werden: einem lokalen Computer, einem Cluster in der Cloud, iOS- und Android-Geräten, CPUs oder GPUs. Wenn Sie Googles eigene Cloud verwenden, können Sie TensorFlow zur weiteren Beschleunigung auf Googles benutzerdefiniertem TensorFlow Processing Unit (TPU)-Silizium ausführen. Die von TensorFlow erstellten resultierenden Modelle können jedoch auf fast jedem Gerät bereitgestellt werden, auf dem sie für Vorhersagen verwendet werden.
TensorFlow 2.0, das im Oktober 2019 veröffentlicht wurde, hat das Framework auf der Grundlage von Nutzerfeedback in vielerlei Hinsicht überarbeitet, um die Arbeit damit zu erleichtern (zum Beispiel durch die Verwendung der relativ einfachen Keras-API für das Modelltraining) und die Leistung zu erhöhen. Verteiltes Training ist dank einer neuen API einfacher auszuführen, und die Unterstützung für TensorFlow Lite ermöglicht es, Modelle auf einer größeren Anzahl von Plattformen einzusetzen. Allerdings muss Code, der für frühere Versionen von TensorFlow geschrieben wurde, umgeschrieben werden - manchmal nur geringfügig, manchmal erheblich - um die neuen Funktionen von TensorFlow 2.0 optimal nutzen zu können.
Ein trainiertes Modell kann verwendet werden, um Vorhersagen als Dienst über einen Docker-Container mit REST- oder gRPC-APIs bereitzustellen. Für fortgeschrittenere Bereitstellungsszenarien können Sie Kubernetes verwenden.
Verwendung von TensorFlow mit Python
All dies stellt TensorFlow dem Programmierer über die Sprache Python zur Verfügung. Python ist leicht zu erlernen und zu verwenden und bietet praktische Möglichkeiten, um auszudrücken, wie Abstraktionen auf hoher Ebene miteinander gekoppelt werden können. TensorFlow wird von den Python-Versionen 3.7 bis 3.10 unterstützt, und obwohl es möglicherweise mit früheren Versionen von Python funktioniert, kann dies nicht garantiert werden.
Knoten und Tensoren in TensorFlow sind Python-Objekte, und TensorFlow-Anwendungen sind selbst Python-Anwendungen. Die eigentlichen mathematischen Operationen werden jedoch nicht in Python durchgeführt. Die Bibliotheken von Transformationen, die durch TensorFlow verfügbar sind, sind als hochleistungsfähige C++-Binärprogramme geschrieben. Python leitet nur den Verkehr zwischen den Teilen und bietet High-Level-Programmierabstraktionen, um sie miteinander zu verbinden.
Die High-Level-Arbeit in TensorFlow – das Erstellen von Knoten und Ebenen und deren Verknüpfung – verwendet die Keras-Bibliothek. Die Keras-API ist äußerlich einfach; Ein Grundmodell mit drei Schichten kann in weniger als 10 Codezeilen definiert werden, und der Trainingscode für dasselbe erfordert nur ein paar weitere Codezeilen. Aber wenn Sie „die Haube heben“ und feinkörnigere Arbeit leisten möchten, z. B. das Schreiben Ihrer eigenen Trainingsschleife, können Sie dies tun.
TensorFlow mit JavaScript verwenden
Python ist die beliebteste Sprache für die Arbeit mit TensorFlow und maschinelles Lernen im Allgemeinen. Aber auch JavaScript ist jetzt eine erstklassige Sprache für TensorFlow, und einer der großen Vorteile von JavaScript ist, dass es überall läuft, wo es einen Webbrowser gibt.
TensorFlow.js, wie die JavaScript-TensorFlow-Bibliothek genannt wird, verwendet die WebGL-API, um Berechnungen mit Hilfe der im System verfügbaren GPUs zu beschleunigen. Es ist auch möglich, ein WebAssembly-Backend für die Ausführung zu verwenden, und es ist schneller als das reguläre JavaScript-Backend, wenn Sie nur auf einer CPU laufen, obwohl es am besten ist, GPUs zu verwenden, wann immer es möglich ist. Vorgefertigte Modelle ermöglichen es Ihnen, mit einfachen Projekten loszulegen, damit Sie eine Vorstellung davon bekommen, wie die Dinge funktionieren.
TensorFlow Lite
Trainierte TensorFlow-Modelle können auch auf Edge-Computing- oder Mobilgeräten, wie iOS- oder Android-Systemen, eingesetzt werden. Das TensorFlow Lite Toolset optimiert TensorFlow Modelle so, dass sie gut auf solchen Geräten laufen, indem es Ihnen erlaubt, Kompromisse zwischen Modellgröße und Genauigkeit zu machen. Ein kleineres Modell (d.h. 12MB gegenüber 25MB oder sogar 100+MB) ist weniger genau, aber der Verlust an Genauigkeit ist im Allgemeinen gering und wird durch die Geschwindigkeit und Energieeffizienz des Modells mehr als ausgeglichen.
Warum TensorFlow verwenden
Der größte Vorteil, den TensorFlow für die Entwicklung von maschinellem Lernen bietet, ist die Abstraktion. Anstatt sich mit den kleinsten Details der Implementierung von Algorithmen zu befassen, oder herauszufinden, wie man die Ausgabe einer Funktion mit der Eingabe einer anderen verknüpft, kann sich der Entwickler auf die gesamte Anwendungslogik konzentrieren. TensorFlow kümmert sich um die Details hinter den Kulissen.
TensorFlow bietet zusätzliche Annehmlichkeiten für Entwickler, die TensorFlow-Anwendungen debuggen und introspektieren müssen. Jede Graphenoperation kann separat und transparent ausgewertet und modifiziert werden, anstatt den gesamten Graphen als ein einziges undurchsichtiges Objekt zu konstruieren und alles auf einmal auszuwerten. Dieser sogenannte "eager execution mode", der in älteren Versionen von TensorFlow als Option angeboten wurde, ist nun Standard.
Die TensorBoard Visualisierungssuite ermöglicht es Ihnen, die Art und Weise, wie Graphen laufen, mit Hilfe eines interaktiven, webbasierten Dashboards zu untersuchen und zu profilieren. Ein Dienst, Tensorboard.dev (gehostet von Google), lässt Sie Experimente zum maschinellen Lernen, die in TensorFlow geschrieben wurden, hosten und teilen. Die Nutzung ist kostenlos und bietet Speicherplatz für bis zu 100M Skalare, 1GB Tensor-Daten und 1GB binäre Objektdaten. (Beachten Sie, dass alle Daten, die in Tensorboard.dev gehostet werden, öffentlich sind, verwenden Sie es also nicht für sensible Projekte).
TensorFlow profitiert auch von der Unterstützung durch ein erstklassiges kommerzielles Unternehmen wie Google. Google hat das schnelle Entwicklungstempo hinter dem Projekt angekurbelt und viele wichtige Angebote geschaffen, die den Einsatz und die Nutzung von TensorFlow erleichtern. Das oben erwähnte TPU-Silizium für beschleunigte Leistung in Googles Cloud ist nur ein Beispiel.
Deterministisches Modelltraining mit TensorFlow
Einige Details der TensorFlow-Implementierung machen es schwierig, völlig deterministische Modelltrainingsergebnisse für einige Trainingsaufgaben zu erhalten. Manchmal weicht ein Modell, das auf einem System trainiert wurde, leicht von einem Modell ab, das auf einem anderen System trainiert wurde, selbst wenn sie mit genau denselben Daten gefüttert wurden. Die Gründe für diese Abweichung sind schlüpfrig - ein Grund ist, wie und wo die Zufallszahlen gesetzt werden; ein anderer hängt mit bestimmten nicht-deterministischen Verhaltensweisen bei der Verwendung von GPUs zusammen. Der 2.0-Zweig von TensorFlow hat eine Option, um Determinismus über einen gesamten Arbeitsablauf mit ein paar Zeilen Code zu aktivieren. Diese Funktion geht jedoch auf Kosten der Leistung und sollte nur beim Debuggen eines Workflows verwendet werden.
TensorFlow vs. PyTorch, CNTK und MXNet
TensorFlow konkurriert mit einer Reihe von anderen Frameworks für maschinelles Lernen. PyTorch, CNTK und MXNet sind drei wichtige Frameworks, die viele der gleichen Anforderungen erfüllen. Lassen Sie uns zum Schluss einen kurzen Blick darauf werfen, wo sie sich von TensorFlow abheben und wo sie unterlegen sind:
· PyTorch ist mit Python aufgebaut und hat viele andere Ähnlichkeiten mit TensorFlow: Hardware-beschleunigte Komponenten unter der Haube, ein hochgradig interaktives Entwicklungsmodell, das Design-as-you-go-Arbeit ermöglicht, und viele nützliche Komponenten sind bereits enthalten. PyTorch ist im Allgemeinen die bessere Wahl für die schnelle Entwicklung von Projekten, die in kurzer Zeit einsatzbereit sein müssen, aber TensorFlow gewinnt bei größeren Projekten und komplexeren Arbeitsabläufen.
· CNTK, das Microsoft Cognitive Toolkit, verwendet wie TensorFlow eine Graphenstruktur zur Beschreibung des Datenflusses, konzentriert sich aber hauptsächlich auf die Erstellung von neuronalen Netzen für tiefes Lernen. CNTK erledigt viele Aufgaben in neuronalen Netzen schneller und verfügt über eine breitere Palette von APIs (Python, C++, C#, Java). Aber es ist derzeit nicht so einfach zu erlernen oder einzusetzen wie TensorFlow. Es ist auch nur unter der GNU GPL 3.0 Lizenz verfügbar, während TensorFlow unter der liberaleren Apache Lizenz verfügbar ist. Und CNTK wird nicht so aggressiv entwickelt; die letzte größere Version war 2019.
· Apache MXNet, das von Amazon als führendes Deep-Learning-Framework auf AWS übernommen wurde, kann fast linear über mehrere GPUs und mehrere Maschinen skalieren. MXNet unterstützt auch eine breite Palette von Sprach-APIs - Python, C++, Scala, R, JavaScript, Julia, Perl, Go -, obwohl seine nativen APIs nicht so angenehm zu bedienen sind wie die von TensorFlow. Es hat auch eine viel kleinere Gemeinschaft von Benutzern und Entwicklern.