Ich habe das folgende einfache MLP-Netzwerk für die MNIST
db geschrieben.
Das Modell lief gut, und ich konnte die Skalarinformationen auf TensorBoard sehen. Allerdings, wenn ich embeddings_freq = 10 geändert habe, um die Bilder zu visualisieren (wie hier ) ) Ich habe den folgenden Fehler erhalten:
%Vor%F: Was fehlt mir? Ist das der richtige Weg in Keras?
Update: Ich verstehe, dass es einige Voraussetzungen gibt, um die Einbettungsprojektion zu verwenden, aber ich habe kein gutes Tutorial dafür in Keras gefunden, jede Hilfe wäre willkommen.
Was hier in callbacks.TensorBoard
"Einbetten" genannt wird, ist im weitesten Sinne jedes Schichtgewicht. Laut Keras-Dokumentation :
embeddings_layer_names: Eine Liste der Namen von Layern, die Sie im Auge behalten sollten. Wenn Keine oder leere Liste, wird die gesamte Einbettungsschicht überwacht.
So standardmäßig , es wird die Embedding
Ebenen überwachen, aber Sie brauchen nicht unbedingt eine Embedding
Ebene, um dieses Visualisierungstool zu verwenden.
In Ihrem angegebenen MLP-Beispiel fehlt das Argument embeddings_layer_names
. Sie müssen herausfinden, welche Schichten Sie visualisieren werden. Angenommen, Sie möchten die Gewichtungen (oder kernel
in Keras) aller Dense
Ebenen visualisieren, können Sie embeddings_layer_names
wie folgt angeben:
Dann können Sie in TensorBoard so etwas sehen:
Sie können die relevanten Zeilen in der Keras-Quelle sehen , wenn Sie möchte herausfinden, was in embeddings_layer_names
passiert.
Also hier ist eine schmutzige Lösung für die Visualisierung von Layer-Ausgaben. Da der ursprüngliche TensorBoard
Callback dies nicht unterstützt, scheint die Implementierung eines neuen Callbacks unvermeidlich.
Da es viel Platz auf der Seite benötigt, um den gesamten TensorBoard
Callback hier neu zu schreiben, erweitere ich einfach das ursprüngliche TensorBoard
und schreibe die Teile aus, die anders sind (was schon ziemlich lang ist) ). Um Doppelberechnungen und das Speichern von Modellen zu vermeiden, ist das erneute Schreiben des TensorBoard
Callbacks ein besserer und sauberer Weg.
Um es zu benutzen:
%Vor% Bevor Sie TensorBoard starten, müssen Sie die Beschriftungen und Bilder für die Visualisierung in log_dir
speichern:
Hier ist das Ergebnis:
Sie benötigen mindestens eine Einbettschicht in Keras. Auf Statistiken war eine gute Erklärung über sie. Es ist nicht direkt für Keras, aber die Konzepte sind ungefähr gleich. Was ist eine Einbettungsschicht in einem neuronalen Netzwerk? >
Ich komme also zu dem Schluss, dass das, was Sie eigentlich wollen (es ist nicht ganz klar aus Ihrem Post), die Vorhersagen Ihres Modells ähnlich wie bei Diese Tensorboard Demo .
Am Anfang ist das Reproduzieren dieses Zeugs nicht-trivial selbst in Tensorflow , geschweige denn Keras. Die Demo macht sehr kurze und passierende Hinweise auf Dinge wie Metadaten & amp; Sprite-Bilder , die notwendig sind, um solche Visualisierungen zu erhalten.
Fazit: Obwohl nicht-trivial, ist es tatsächlich möglich, es mit Keras zu machen. Sie brauchen die Keras-Rückrufe nicht; Alles, was Sie brauchen, sind Ihre Modellvorhersagen, die notwendigen Metadaten & amp; Sprite-Bild und etwas reinen TensorFlow-Code. Also,
Schritt 1 - Ermitteln Sie Ihre Modellvorhersagen für das Testset:
%Vor%Schritt 2a - Erstellen Sie eine Metadatendatei mit den echten Bezeichnungen des Testsets:
%Vor% Schritt 2b - Erhalte das Sprite-Bild mnist_10k_sprite.png
wie von den TensorFlow-Jungs hier LOG_DIR
Schritt 3 - Schreiben Sie einen Tensorflow-Code:
%Vor% Wenn Sie dann Tensorboard in Ihrem LOG_DIR
ausführen und Farbe nach Beschriftung auswählen, erhalten Sie Folgendes:
Dies zu modifizieren, um Vorhersagen für andere Schichten zu erhalten, ist einfach, obwohl in diesem Fall die Keras Functional API eine bessere Wahl ist.
Tags und Links python deep-learning keras tensorboard mnist