TensorFlow ist eines der wichtigsten Frameworks im Deep-Learning-Bereich. Die Architektur wurde für Version 2.0 gründlich überarbeitet. Die ausgereifte Veröffentlichung bietet weitreichende Nutzungsmöglichkeiten für das Deep Learning.
Langsam, aber sicher etabliert sich Machine Learning in vielen Unternehmen und wird ein fester Bestandteil in einem Toolrepertoire, wenn Daten analysiert und über prädiktive Algorithmen Prozesse automatisiert werden sollen. Gerade bei der Bild- und Spracherkennung ist Deep Learning, ein Unterbereich des Machine Learning, ein wichtiger Enabler. Immer zahlreicher werden die Veröffentlichungen von quelloffenen Frameworks und Bibliotheken, welche die Verwendung von Deep Learning vereinfachen sollen. Eines dieser Frameworks trägt den Namen TensorFlow [1] und hat seit seiner Veröffentlichung 2015 viele Anhänger gefunden, insbesondere in der Forschung an Hochschulen sowie in der Praxis der Industrie und in der Medizin. So können zum Beispiel mit speziell ausgelegten Algorithmen Vorabtests durchgeführt werden, um Hautkrebs vorzeitig zu erkennen oder um Handschriftzeichen zu digitalisieren. Die Möglichkeiten mit TensorFlow sind äußerst vielseitig: Dabei sind es methodisch betrachtet unterschiedliche Konzepte künstlicher neuronaler Netze, die die Umsetzung solcher Anwendungen ermöglichen. TensorFlow ist darüber hinaus ein Tool in Form einer Programmierbibliothek, die die Implementierung derartiger neuronaler Netze ermöglicht.
Obwohl TensorFlow eines der beliebtesten ML Frameworks ist, ist die Nutzung auf Grund der Low-Level-Programmierung für den ungeübten Anwender oder für Einsteiger sehr irreführend und unhandlich. Und dies war einer der Hauptgründe für Google, eine reifere Version von TensorFlow in der Version 2.0 freizugeben. Dabei wurde eine Bereinigung der APIs vorgenommen und diverse Modi, beispielsweise Eager Execution, wurden als Standard gesetzt, um die Programmierung zu vereinfachen. Der Fokus von TensorFlow 2.0 liegt eindeutig darin, dass dessen Verwendung intuitiver und schneller sein soll.
Was ist neu in TensorFlow 2.0?
TensorFlow 1.x ist ein Framework zur datenstromorientierten Programmierung. Dabei wird in einer Konstruktionsphase ein Berechnungsgraph erstellt, der mit Knoten und Kanten beschrieben wird. Die Knoten beinhalten die Operationen, und in den Kanten fließen die Daten zwischen den einzelnen Knoten. Danach wird der Graph in der Ausführungsphase mit den Daten gefüllt. Der Vorteil der datenstromorientierten Programmierung ist zum einen die Möglichkeit der Parallelisierung von Operationen, der verteilten Ausführung auf verschiedenen Systemen und Geräten, die Skalierbarkeit und die hohe Portabilität. All diese Vorteile haben unbestreitbar ihren Mehrwert. Besonders wenn es auf Performance ankommt, können diese Eigenschaften ausgespielt werden, um ein Modell zu entwickeln, das für den jeweiligen Anwendungszweck optimiert ist.
Für eine schnelle Anwendung, zum Beispiel für einen einfachen Test oder einen schnellen Modellaufbau, ist TensorFlow 1.x jedoch nicht die beste Wahl. Auch ist die Separierung zwischen Konstruktions- und Ausführungsphase für den Großteil der Python-Anwender ungewöhnlich, da sie an imperative Programmierung gewöhnt sind. Ebenfalls sehr verwirrend ist die Tatsache, dass Funktionen doppelt auftauchen, was die Benutzung und Wahl von Funktionen inkonsistent und redundant gestaltet (Tabelle 1).
Stärken | Schwächen |
---|---|
skalierbar | Low-Level-Programmierung |
parallelisierbar | redundante Funktionen |
große Community | Cluster Loads |
viele Plattformen | nicht Pythonic |
Open Source (Google) | schwierig zu debuggen |
Tabelle 1: Stärken und Schwächen von TensorFlow 1.x
Mit TensorFlow 2.0 wurden diese Schwächen nicht nur bereinigt, zusätzlich ist Keras nun das standardisierte und empfohlene High Level API. Auch wurde der Eager-Execution-Modus, der mit Version 1.5 vorgestellt wurde, als Default eingestellt. Er erlaubt eine imperative Programmierung ohne Ausführung von Session.run(). Das erleichtert das Verstehen und Debuggen von TensorFlow-Code deutlich. Ein weiterer Punkt, um die Arbeitsweise zu vereinfachen, ist der Wegfall von globalen Namensräumen (Namespaces). Wenn Größen für den Graphen definiert und später gelöscht werden, bleiben sie immer noch im Standardgraph. Das führt zu Komplikationen und Missverständnissen beim Aufruf von Größen mit ähnlichen Namen. Daher wurde dieser Mechanismus in TensorFlow 2.0 entfernt (Tabelle 2).
Im Folgenden wird Keras vorgestellt, mit dem ein einfaches neuronales Netz erstellt werden soll. Danach wird auf die neuen Defaultmechanismen eingegangen, die in einem fortgeschrittenen Beispiel eingesetzt werden sollen.
Schwächen in TensorFlow 1.x | Verbesserung in TensorFlow 2.0 |
---|---|
Low-Level-Programmierung | Keras als High Level Programming |
doppelte Funktionen | eindeutige Zuteilung der Funktionen |
Cluster Loads | Eager Execution |
nicht Pythonic | Funktionen statt Sessions |
schwierig zu debuggen |
Tabelle 2: TensorFlow-Versionen im Vergleich
Keras in TensorFlow
Keras ist eine eigenständige Machine-Learning-Bibliothek für Python, die es ermöglicht, vordefinierte Modelle einfach und nutzerfreundlich zu erstellen. Ursprünglich war Keras eine eigene Bibliothek, die für die B...