Christoph Henkelmann Selbstständig

„Eine der größten Stärken und Schwächen von TensorFlow ist die Modularität, die es erlaubt, ein ML-Prpjekt auf unterschiedliche Arten zu bauen und an individuelle Bedürfnisse anzupassen.“

Am Ende eines aufwändigen Entwicklungsprozesses steht ein mit viel Fleiß und Mühe erfolgreich trainiertes TensorFlow-Machine-Learning-Verfahren. Jetzt soll es für einen Kunden in Betrieb genommen werden. Aber wie soll das geschehen? Was muss deployt werden? Natürlich liegt der Einsatz in einer Python-Umgebung, etwa auf einem Django-Webserver oder dem brandneuen TensorFlow Serving nahe. Zum Glück gibt es aber auch eine von Google unterstützte Java-Wrapper-Bibliothek. Wir müssen nicht auf unsere bewährten Java-Tools für den Servereinsatz verzichten. Allerdings tauchen auf dem Weg zum fertigen REST-Service eine Reihe praktischer Hürden auf.

Das richtige Vorgehen lässt sich am besten anhand eines Beispiels erläutern: Wir möchten die sensorische Qualität (wie lecker ist er?) von Wein anhand chemischer und physischer Messwerte vorhersagen. Die Daten hierzu stammen aus dem UCI Machine Learning Repository und wurden im Rahmen eines Papers der Universität Minho in Portugal erfasst. Das komplette Codebeispiel für eine Umsetzung mit TensorFlow ist auf GitHub zu finden. Der Input unseres Modells besteht aus diversen Messwerten wie pH-Wert, Alkohol, Zucker etc. Der Output ist eine Einschätzung der Weinqualität auf einer Skala von 0-10. Die Bewertung der Trainingsdaten haben professionelle Weinkenner übernommen und ist für Forschungszwecke frei zugänglich.

Damit wir ein gelerntes Modell erfolgreich in der Praxis einsetzen können, muss der TensorFlow Code zum Trainieren des Modells so strukturiert sein, dass das gelernte Modell passend exportiert werden kann. Auf der Java-Seite muss das Modell dann wieder richtig eingebunden werden. Wir werden also versuchen, einen KI-Weinkenner zu bauen und über einen Java-Server anzusprechen.

Warum überhaupt Java – TensorFlow ist doch Python-Software?

Alle tatsächlichen Berechnungen in TensorFlow werden durch die zugrunde liegende TensorFlow-C++-Bibliothek durchgeführt. Das Python-API, das in allen Beispielen zu sehen ist, ist eigentlich nur ein bequemer Wrapper, um das C++-API zu steuern und leichter nutzbar zu machen. Wenn wir also ein fertig trainiertes Modell nur noch aufrufen wollen, um eine Vorhersage oder Klassifikation vorzunehmen, sind wir auf den Python Wrapper nicht mehr angewiesen.

Nun wissen wir, dass wir für den Einsatz in einem Produktivsystem auf Python verzichten und stattdessen beispielsweise Java (mit JNI) einsetzen können. Aber ist das überhaupt sinnvoll? Vom technischen Standpunkt macht es keinen großen Unterschied. Wenn der Entwickler die unten aufgeführten Klippen erst einmal umschifft hat, ist der Aufwand mit einem Einsatz in beispielsweise Spring oder Django vergleichbar, was die Implementierung betrifft.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 5.18 - "Maschinelles Lernen"

Alle Infos zum Heft
579833840In vino veritas: Integration in einen Java-Server
X
- Gib Deinen Standort ein -
- or -