Strömende Tensoren

Dies ist der erste Teil der Artikelserie Strömende Tensoren.

Ich habe vor ein paar Tagen angefangen mich, nach sehr langer Zeit, mal wieder näher mit Maschinen Lernen, genauer neuronalen Netzen zu beschäftigen. Wenn man danach sucht stolpert man unweigerlich über TensorFlow.

Ein mächtiges Werkzeug, es gibt auf der Website gleich mehrere Tutorials und auch eine mehr oder minder gute Dokumentation aller vorhandenen Funktionen.

Man findet auch im Internet jede Menge Dokumentationen in allen möglichen Formaten, was denn neuronale Netze sind. (Empfohlen sei an dieser Stelle Ein kleiner Überblick über Neuronale Netze).

Mir hat es jedoch den Einstieg jedoch unheimlich erschwert, daß ich nichts zu den Begrifflichkeiten und Funktionsweisen von Tensorflow auf Anhieb gefunden habe.

Aber von Anfang an:

Ein neuronales Netz kann man sich zuerst einmal als schwarze Kiste vorstellen. Auf der einen Seite kommen die Eingabedaten rein, auf der anderen kommen Ergebnisse raus. Wenn man ein Netz neu aufbaut stimmen die Ergebnisse jedoch mit Sicherheit nicht mit den gewünschten Werten überein. Das Netz muß erst lernen, es muß trainiert werden mit Paaren aus Eingabedaten und dazu bekannten bzw. gewünschten Ergebnissen.

In Tensorflow heißen die Eingabedaten Features und die erwarteten Ergebnisse Labels.

Da man jedoch zum Teil mit sehr großen Datenmengen hantiert, die nicht vollständig in den Speicher passen, erstellt man bei Tensorflow nicht einfach ein neuronales Netz mit festen Werten und füttert es mit den Trainingsdaten, sondern man beschreibt, auf welche Art und Weise die Daten mit einander verknüpft werden und woher sie kommen.

Ein solcher Stellvertreter-Datensatz wird Tensor genannt. Er hat eine Dimension (shape) und einen Datentyp (dtype), konkrete Werte nimmt er jedoch erst später im Programmlauf an.

Damit wären schon mal einige wichtige Begriffe genannt.

Die nächste Schwierigkeit, die ich hatte, war, daß es viele unterschiedliche Möglichkeiten der Erstellung eines neuronalen Netzes und der Art und Weise wie man die Daten von der Quelle lädt und dem Netz füttert, gibt.

Zuerst einmal benötigt man einen tf.estimator.Estimator. Diesen kann man, wie im MNIST-Tutorial, selber zusammenbauen (Erstellung des Estimators mithilfe einer Funktion welche die Struktur des Netzes aufbaut) oder man benutzt einen vordefinierten Modell-Typ wie in Premade Estimators for ML Beginners, in dem ein tf.estimator.DNNClassifier für die Klassifikation von drei Arten der Gattung Schwertlilie (Iris) anhand der Geometrie der Blüten benutzt wird.

Und da ich jetzt gerade merke, daß es zu lange dauern wird, alles, was ich schreiben möchte, in diesen einen Artikel zu packen, veröffentliche ich diesen Teil jetzt und mache eine kleine Reihe daraus.

Zum zweiten Teil

Links zu weiterführenden Informationen dieser Artikelserie:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert