Terragon-Programmierung: Einführung in TensorFlow.js

Diese kurze Einführung in TensorFlow.js zeigt die Einbindung in eine HTML Seite, das Erstellen eines Tensors und einer Variablen, das Durchführen von Operationen und das Freigeben des Speichers.

Basierend auf der offiziellen Einführung:

https://js.tensorflow.org/

Schritt 1: TensorFlow.js in HTML Seite einbinden

Das Einbinden der JavaScript Datei erfolgt ganz einfach über <script> und kann entweder von einer lokalen Datei, oder von der externen Quelle eingebunden werden.

Hinweis: Auch wenn der Verweis auf eine externe Datei immer die aktuellste Version liefert, kann es Sinn machen eine lokale Datei zu speichern, die auch nach mehreren Jahren noch zuverlässig genau so funktioniert wie heute.

Schritt 2: Den ersten Tensor erstellen

Die grundlegenden Container in TensorFlow sind Tensors, die ähnlich wie Arrays in PHP aufgebaut sind, jedoch nur numerische Zahlenwerte beinhalten können.

Optional kann vor dem Einrichten eines Tensors dessen shape festgelegt werden, der die Anzahl der Reihen und Spalten des Arrays (Tensors) angibt.

Um die Eingabe von Standard-Tensors zu vereinfachen bzw schneller zu machen, lassen sich beliebig große Tensors mit Einsen oder Nullen komplett füllen.

Wichtig zu wissen ist, dass Tensors sich nicht mehr verändern lassen, wenn sie einmal angelegt wurden. Das heißt, sämtliche Operation mit ihnen ändern nicht den Tensor, sondern erstellen einen neuen Tensor mit dem Rechenergebnis.

Schritt 3: Die erste Variable erstellen

Anders als Tensors lassen sich Variablen jederzeit verändern, wie eigentlich in allen Programmiersprachen.

Daher werden Variablen z.b. als Gewichtung zwischen den Layern verwendet, die nach jedem Durchgang des Trainingssatzes angepasst werden.

Schritt 4: Die erste Operation erstellen

Operationen in Tensorflow beziehen sich im Wesentlichen auf Tensors, die miteinander multipliziert, quadriert, addiert oder subtrahiert werden können.

Die Ergebnisse von Operationen werden in neuen Tensors gespeichert, da diese nicht überschrieben werden können.

Schritt 5: Operationen verketten

Dadurch dass Operationen beliebig verkettet werden können, sind auch aufwendige Matrix Berechnungen mit nur wenigen Befehlen möglich.

Speicher aufräumen

Da bereits einfache Operationen viel Speicher belegen können, wird empfohlen den Speicher nach der Berechnung wieder zu löschen bzw freizugeben.

Dazu wird die eigentliche Berechnung in eine Art Metafunktion gepackt, die nach der Berechnung sämtliche Zwischenschritte löscht, und nur das Ergebnis im Speicher behält.

Ob das wirklich notwendig ist habe ich noch nicht getestet, aber da es empfohlen wird sei an dieser Stelle darauf hingewiesen.

Training-Data immer in zufälliger Reihenfolge trainieren

When training the classifier, it's important to randomly shuffle the data, so the model's predictions aren't affected by the order in which we feed it images.

For example, if we were to feed the model all the   1  digits first, during this phase of training, the model might learn to simply predict   1  (since this minimizes the loss).

If we were to then feed the model only   2 s, it might simply switch to predicting only   2  and never predict a   1  (since, again, this would minimize loss for the new set of images).

The model would never learn to make an accurate prediction over a representative sample of digits.

(Weg 1) "Model" als Funktion direkt mit Operationen

Ein bereits aus anderen Programmiersprachen bekannter Weg, ist das direkte Programmieren von Modellen als Funktion mit Input und Output, in der sämtliche Berechnungen stattfinden.

Dabei werden sämtliche Rechenwege, mehr oder weniger von Hand, direkt selbst programmiert.

(Weg 2) "Model" mit high-level API: "tf.model" und "layern"

Hierbei müssen die eigentlichen Funktionen für die Berechnung nicht von Hand einprogrammiert werden, sondern es kann auf vorgegebene Methoden zurückgegriffen werden.

Dabei wird zuerst das Model angelegt, welches dann um eine beliebige Anzahl und Auswahl von Layern ergänzt werden kann.

Install and Test Video