© Rawpixel.com/Shutterstock.com
Training von TensorFlow-Modellen mit JVM-Sprachen

Deep Learning: nicht nur in Python


Zwar gibt es mit Frameworks wie DL4J mächtige und umfangreiche Machine-Learning-Lösungen für die JVM, dennoch kann es in der Praxis vorkommen, dass der Einsatz von TensorFlow notwendig wird. Das kann beispielsweise der Fall sein, wenn es einen bestimmten Algorithmus nur in einer TensorFlow-Implementierung gibt und der Portierungsaufwand in ein anderes Framework zu hoch ist. Zwar interagiert man mit TensorFlow über ein Python API, die zugrunde liegende Engine jedoch ist in C++ geschrieben. Mit Hilfe der TensorFlow-Java-Wrapper-Bibliothek kann man deshalb sowohl Training als auch Inferenz von TensorFlow-Modellen aus der JVM heraus betreiben, ohne auf Python angewiesen zu sein. So können bestehende Schnittstellen, Datenquellen und Infrastruktur mit TensorFlow integriert werden, ohne die JVM zu verlassen.

KI und Deep Learning sind immer noch in aller Munde und trotz einiger erster Rückschläge, beispielsweise im Bereich selbstfahrender Autos, ist das Potenzial von Deep Learning noch lange nicht ausgeschöpft. Auch gibt es noch viele Bereiche der IT, in denen das Thema gerade erst richtig Fahrt aufnimmt. Daher ist es besonders wichtig, zu schauen, wie man Deep-Learning-Systeme auf der JVM realisieren kann, denn Java (sowohl die Sprache als auch die Plattform) sind immer noch dominierende Technologien im Enterprise-Bereich.

TensorFlow ist eins der wichtigsten Frameworks im Deep-Learning-Bereich und trotz der steigenden Popularität von Keras noch immer nicht wegzudenken, insbesondere da KI-Platzhirsch Google die Entwicklung weiter vorantreibt. In diesem Artikel wird gezeigt, wie TensorFlow aus einer JVM heraus sowohl für das Training von TensorFlow-Modellen als auch für die Inferenz genutzt werden kann.

Wofür ist die Kombination aus TensorFlow und JVM geeignet?

Möchte man auf der JVM Deep Learning betreiben, ist normalerweise DL4J das Mittel der Wahl, da es als einziges professionelles Deep Learning Framework wirklich auf der JVM zu Hause ist. TensorFlow wird hauptsächlich – wie viele Machine Learning Frameworks – mit Python genutzt. Es gibt jedoch Gründe, TensorFlow aus einem JVM-Kontext heraus zu nutzen:

  • Man möchte ein Verfahren nutzen, für das es bei TensorFlow, nicht aber bei DL4J eine Implementierung gibt, und für das der Portierungsaufwand zu hoch ist.

  • Man arbeitet mit einem Data-Science-Team, das gewohnt ist, mit TensorFlow und Python zu arbeiten, aber die Zielinfrastruktur läuft auf der JVM.

  • Die für das Training notwendigen Daten liegen in einer Java-Infrastruktur (Datenbanken, eigene Dateiformate, APIs), und um an die Daten zu gelangen, müsste existierender Schnittstellencode von Java nach Python portiert werden.

Die JVM-TensorFlow-Kombination ist also immer dann sinnvoll, wenn eine existierende Java-Umgebung vorhanden ist und aus personellen oder projekttechnischen Gründen trotzdem TensorFlow für Deep Learning genutzt werden sollte (Kasten: „TensorFlow und JVM – immer eine gute Idee?“).

TensorFlow und JVM – immer eine gute Idee?

Auch wenn es gute Gründe für diese Kombination geben kann, ist es auch wichtig, anzusprechen, was dagegensprechen kann. Insbesondere die Wahl von TensorFlow sollte gut bedacht sein:

  • TensorFlow ist kein geeignetes Framework für Deep- oder Machine-Learning-Anfänger.

  • TensorFlow ist nicht benutzerfreundlich: Das API ändert sich schnell, oft ist in dem Wust von Anleitungen nicht klar, welcher Weg der geeignete ist.

  • TensorFlow ist nicht besser, nur weil es von Google ist: Deep Learning ist Mathematik, und die ist für alle gleich. TensorFlow erzeugt keine „schlaueren“ KIs als andere Frameworks. Auch ist es nicht schneller als die Alternativen (allerdings auch nicht „dümmer“ oder langsamer).

Möchte man in Deep Learning einsteigen und auf der JVM bleiben, ist der Einsatz von DL4J absolut zu empfehlen. Gerade für professionelle Enterprise-Projekte ist DL4J eine gute Wahl. Aber auch wenn man sozusagen über den Zaun blicken und ein wenig Python ausprobieren möchte, lohnt es sich, nach TensorFlow-Alternativen zu schauen. Hier ist man aktuell bei Keras besser aufgehoben, einem wesentlich angenehmeren API sei Dank.

Wie funktioniert TensorFlow?

Bevor man ein neues Framework einsetzt, ist es wichtig, sich ein wenig damit auseinanderzusetzen, was unter der Haube passiert (Kasten: „TensorFlow Begriffs-Cheat-Sheet“). Bei TensorFlow denkt man zunächst einmal an KI und neuronale Netze, aber technisch gesehen handelt es sich vor allem um ein Framework, das komplexe, sich immer wiederholende parallele Berechnungen auf Tensoren ausführen kann – und das, wenn möglich, GPU-beschleunigt. Auch wenn Deep Learning das Hauptanwendungsgebiet für TensorFlow ist, kann man auch beliebige andere Berechnungen damit durchführen.

Ein TensorFlow-Programm – oder besser: die Konfiguration einer Berechnung – ist in TensorFlow immer wie ein Graph aufgebaut. Die Knoten des Graphen stellen Operationen dar, wie etwa Addieren oder Multiplizieren, aber auch Laden und Speichern. Alles was TensorFlow tut, findet in den Knoten eines vorher definierten Berechnungsgraphen statt.

Die Knoten (Operationen) des Graphen sind durch Kanten verbunden, durch die die Daten in Form von Tensoren fließen. Daher auch der Name TensorFlow.

Alle Berechnungen in TensorFlow finden in einer sogenannten Session statt. In der Session wird entweder ein fertiger Graph geladen oder stückweise durch API-Aufrufe ein neuer Graph erzeugt. Spezielle Knoten im Graphen können Variablen enthalten. Damit der Graph funktioniert, müssen diese initialisiert werden. Ist das geschehen und existiert eine Session mit fertigem, initialisiertem Graphen, interagiert man mit TensorFlow nur noch durch das Aufrufen von Operationen im Graphen. Was dabei berechnet wird, hängt davon ab, welche Ausgabeknoten des Graphen abgefragt werden. Es wird also nicht der gesamte Graph ausgeführt, sondern nur die Operationen, die Input für den abgefragten Knoten liefern, dann wiederum deren Eingabeknoten etc. zurück zu den Eingabeoperationen, die mit dem notwendigen Inputtensoren befüllt sein müssen.

Das wichtige bei TensorFlow ist, dass alle Operationen automatisch für den Nutzer differenziert werden – das braucht man für das Training von neuronalen Netzen. Da es jedoch automatisch geschieht, kann man es als Anwender getrost ausblenden.

Der Graph wird in der Regel durch ein Python API definiert. Er ist zwar mit Hilfsprogrammen grafisch darstellbar (Abb. 1), solche Darstellungen dienen aber nur dem Debugging, es wird nicht grafisch programmiert wie in einer visuellen Programmiersprache, wie etwa LabView.

henkelmann_tensorflow_1.tif_fmt1.jpgAbb. 1: Ein (kleiner) Ausschnitt aus einem TensorFlow-Graphen: Die Zahlen an den Kanten zeigen die Größe des Tensors an, der durch sie fließt, die Pfeile die Richtung

Obwohl in...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang