Keras - Speichert die Bildeinbettung des mnist-Datensatzes

8

Ich habe das folgende einfache MLP-Netzwerk für die MNIST db geschrieben.

%Vor%

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.

    
Shlomi Schwartz 23.07.2017, 13:09
quelle

3 Antworten

11

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:

%Vor%

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.

Bearbeiten:

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.

%Vor%

Um es zu benutzen:

%Vor%

Bevor Sie TensorBoard starten, müssen Sie die Beschriftungen und Bilder für die Visualisierung in log_dir speichern:

%Vor%

Hier ist das Ergebnis:

    
Yu-Yang 26.07.2017, 08:24
quelle
1

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? >

    
Carsten 24.07.2017 16:17
quelle
1

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 , und platziere es in deinem 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.

    
desertnaut 26.07.2017 19:19
quelle