Wie verwende ich den Tensorboard-Rückruf von Keras?


143

Ich habe mit Keras ein neuronales Netzwerk aufgebaut. Ich würde seine Daten mit Tensorboard visualisieren, daher habe ich verwendet:

keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,
                            write_graph=True, write_images=True)

wie in keras.io erklärt . Wenn ich den Rückruf starte, erhalte ich <keras.callbacks.TensorBoard at 0x7f9abb3898>, aber ich bekomme keine Datei in meinem Ordner "Graph". Stimmt etwas nicht, wie ich diesen Rückruf verwendet habe?


3
Ich würde vorschlagen , Einstellung histogram_freqzu 1. "histogram_freq: Häufigkeit (in Epochen), mit der Aktivierungshistogramme für die Ebenen des Modells berechnet werden. Wenn der Wert auf 0 gesetzt ist, werden Histogramme nicht berechnet."
Matt Kleinsmith

10
Seien Sie vorsichtig: "/ Graph" erstellt ein Verzeichnis im Stammverzeichnis, während "./Graph" eines im Arbeitsverzeichnis erstellt.
Matt Kleinsmith

@MattKleinsmith Wenn dieser Wert auf 0 gesetzt ist, werden nur Aktivierungs- und Gewichtungshistogramme für die Ebenen des Modells nicht über Validierungsdaten berechnet. Die Metriken werden weiterhin protokolliert.
BugKiller

Ich denke, es ist besser, logdir einen eindeutigen Namen zu geben. Schauen Sie auf stackoverflow.com/a/54949146/1179925
mrgloom

Antworten:


219
keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

Diese Zeile erstellt ein Callback Tensorboard-Objekt. Sie sollten dieses Objekt erfassen und der fitFunktion Ihres Modells zuweisen .

tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
...
model.fit(...inputs and parameters..., callbacks=[tbCallBack])

Auf diese Weise haben Sie der Funktion Ihr Rückrufobjekt übergeben. Es wird während des Trainings ausgeführt und gibt Dateien aus, die mit Tensorboard verwendet werden können.

Wenn Sie die während des Trainings erstellten Dateien visualisieren möchten, führen Sie sie in Ihrem Terminal aus

tensorboard --logdir path_to_current_dir/Graph 

Hoffe das hilft !


Ich habe dies mit folgendem Fehler verwendet, wenn write_images = False
abdul qayyum

InvalidArgumentError (Traceback siehe oben): Der Tensor muss 4-D mit dem letzten Dim 1, 3 oder 4 sein, nicht [1,3,3,256,256,1] [[Node: conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <Typ: uint8 Form: [4] Werte: 255 0 0 ...>, max_images = 3, _device = "/ job: localhost / replica: 0 / task: 0 / cpu: 0"] (conv_3. 2_2 / kernel_0_1 / tag, ExpandDims_50)]]
abdul qayyum

Und etwas, das besagt, dass Platzhalter fehlt, ist dtype = float, wenn True Any Idea?
Abdul Qayyum

2
Die Registerkarte "Skalare" ist noch leer, obwohl ich meine Modellarchitektur auf der Registerkarte "Diagramme" sehen kann.
Iratzhash

1
Dies erzeugt nur Skalare für Trainingsverlust und Genauigkeit. Wie machen Sie dasselbe für die Validierungsdaten, die an die Anpassungsfunktion übergeben werden?
Utku Ufuk

46

So verwenden Sie den TensorBoard-Rückruf :

from keras.callbacks import TensorBoard

tensorboard = TensorBoard(log_dir='./logs', histogram_freq=0,
                          write_graph=True, write_images=False)
# define model
model.fit(X_train, Y_train,
          batch_size=batch_size,
          epochs=nb_epoch,
          validation_data=(X_test, Y_test),
          shuffle=True,
          callbacks=[tensorboard])

2
Gibt es eine Möglichkeit, die Ausgabe von Tensorboard besser zu strukturieren? Führt Keras diesbezüglich einige Optimierungen durch?
Nickpick

2
@nickpick Ich weiß nicht was du meinst. Aber ich denke, dies könnte ein Kandidat für eine andere Frage sein.
Martin Thoma


Es ist wichtig zu beachten, dass dies eingestellt histogram_freq=0ist, wenn Tensorboard kein Histogramm von protokolliert tf.summary.histogram- andernfalls ist histogram_freqes NICHT gleich 0!
Agile Bean

20

Veränderung

keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

zu

tbCallBack = keras.callbacks.TensorBoard(log_dir='Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

und stellen Sie Ihr Modell ein

tbCallback.set_model(model)

Führen Sie in Ihrem Terminal

tensorboard  --logdir Graph/

ich habe AttributeError: 'TensorBoard' object has no attribute 'set_model' .
Fábio Perez

15

Wenn Sie mit der Keras-Bibliothek arbeiten und Tensorboard zum Drucken Ihrer Genauigkeitsdiagramme und anderer Variablen verwenden möchten, gehen Sie wie folgt vor.

Schritt 1: Initialisieren Sie die Keras-Rückrufbibliothek mit dem folgenden Befehl, um Tensorboard zu importieren

from keras.callbacks import TensorBoard

Schritt 2: Fügen Sie den folgenden Befehl direkt vor dem Befehl "model.fit ()" in Ihr Programm ein.

tensor_board = TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)

Hinweis: Verwenden Sie "./graph". Der Diagrammordner wird in Ihrem aktuellen Arbeitsverzeichnis generiert. Vermeiden Sie die Verwendung von "/ graph".

Schritt 3: Fügen Sie einen Tensorboard-Rückruf in "model.fit ()" ein. Das Beispiel ist unten angegeben.

model.fit(X_train,y_train, batch_size=batch_size, epochs=nb_epoch, verbose=1, validation_split=0.2,callbacks=[tensor_board])

Schritt 4: Führen Sie Ihren Code aus und prüfen Sie, ob sich Ihr Diagrammordner in Ihrem Arbeitsverzeichnis befindet. Wenn die oben genannten Codes korrekt funktionieren, befindet sich in Ihrem Arbeitsverzeichnis der Ordner "Graph".

Schritt 5: Öffnen Sie Terminal in Ihrem Arbeitsverzeichnis und geben Sie den folgenden Befehl ein.

tensorboard --logdir ./Graph

Schritt 6: Öffnen Sie nun Ihren Webbrowser und geben Sie die folgende Adresse ein.

http://localhost:6006

Nach der Eingabe wird die Tensorbaord-Seite geöffnet, auf der Sie Ihre Diagramme verschiedener Variablen sehen können.


Es ist wichtig zu beachten, dass dies eingestellt histogram_freq=0ist, wenn Tensorboard kein Histogramm von protokolliert tf.summary.histogram- andernfalls ist histogram_freqes NICHT gleich 0!
Agile Bean

9

Hier ist ein Code:

K.set_learning_phase(1)
K.set_image_data_format('channels_last')

tb_callback = keras.callbacks.TensorBoard(
    log_dir=log_path,
    histogram_freq=2,
    write_graph=True
)
tb_callback.set_model(model)
callbacks = []
callbacks.append(tb_callback)

# Train net:
history = model.fit(
    [x_train],
    [y_train, y_train_c],
    batch_size=int(hype_space['batch_size']),
    epochs=EPOCHS,
    shuffle=True,
    verbose=1,
    callbacks=callbacks,
    validation_data=([x_test], [y_test, y_test_coarse])
).history

# Test net:
K.set_learning_phase(0)
score = model.evaluate([x_test], [y_test, y_test_coarse], verbose=0)

Grundsätzlich histogram_freq=2ist dies der wichtigste Parameter, der beim Aufrufen dieses Rückrufs optimiert werden muss: Er legt ein Intervall von Epochen fest, in denen der Rückruf aufgerufen wird, mit dem Ziel, weniger Dateien auf Datenträgern zu generieren.

Hier ist eine beispielhafte Visualisierung der Entwicklung der Werte für die letzte Faltung während des Trainings, die einmal in TensorBoard unter der Registerkarte "Histogramme" angezeigt wurde (und ich fand, dass die Registerkarte "Verteilungen" sehr ähnliche Diagramme enthielt, aber auf der Seite umgedreht war):

Überwachung der Tensorboardgewichte

Wenn Sie ein vollständiges Beispiel im Kontext sehen möchten, können Sie auf dieses Open-Source-Projekt verweisen: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


Ich habe dies abgelehnt, weil ein großer Teil davon tatsächlich Fragen sind und keine Antwort auf die Frage. Stellen Sie keine neuen Fragen in Antworten, egal ob es sich um einen Teil oder den gesamten Zweck einer Antwort handelt.
Zoe

Ich habe die Frage bearbeitet, um das zu entfernen, was Sie erwähnt haben. Tatsächlich ist dieser Rückruf aus der Dokumentation zum Zeitpunkt meiner Antwort sehr schwer richtig zu verwenden.
Guillaume Chevalier

Zur Beantwortung von "Wie verwende ich den TensorBoard-Rückruf von Keras?" Sind alle anderen Antworten unvollständig und antworten nur auf den kleinen Kontext der Frage - niemand befasst sich beispielsweise mit Einbettungen. Zumindest hatte ich in meiner Antwort mögliche Fehler oder Dinge dokumentiert, die ich vermeiden sollte. Ich glaube, ich habe wichtige Fragen aufgeworfen, an die noch niemand zu denken glaubt. Ich warte immer noch auf eine vollständige Antwort. Dieser Rückruf ist ebenso wie Krebs schlecht dokumentiert.
Guillaume Chevalier

4

Wenn Sie Google-Colab verwenden, wäre eine einfache Visualisierung des Diagramms:

import tensorboardcolab as tb

tbc = tb.TensorBoardColab()
tensorboard = tb.TensorBoardColabCallback(tbc)


history = model.fit(x_train,# Features
                    y_train, # Target vector
                    batch_size=batch_size, # Number of observations per batch
                    epochs=epochs, # Number of epochs
                    callbacks=[early_stopping, tensorboard], # Early stopping
                    verbose=1, # Print description after each epoch
                    validation_split=0.2, #used for validation set every each epoch
                    validation_data=(x_test, y_test)) # Test data-set to evaluate the model in the end of training

2

Du hast geschrieben, log_dir='/Graph'meintest du ./Graphstattdessen? Du hast es /home/user/Graphim Moment an geschickt.


1
Warum sollte /Graphein Ordner im Home-Verzeichnis des Benutzers erstellt werden, anstatt nur /Graphdirekt zu verwenden?
Michael Mior

2

Sie sollten sich Losswise ( https://losswise.com ) ansehen . Es enthält ein Plugin für Keras, das einfacher zu verwenden ist als Tensorboard und einige nette zusätzliche Funktionen bietet. Mit Losswise würden Sie nur from losswise.libs import LosswiseKerasCallbackund dann verwenden callback = LosswiseKerasCallback(tag='my fancy convnet 1')und los geht's (siehe https://docs.losswise.com/#keras-plugin ).


7
Haftungsausschluss: OP ist der Gründer von Losswise, einem kostenpflichtigen Produkt (obwohl mit einer ziemlich großzügigen kostenlosen Stufe)
Michael Mior

@ MichaelMior ist richtig, obwohl es noch kein kostenpflichtiges Produkt ist und möglicherweise nie sein wird (außer bei Prem-Lizenzen in der Zukunft vielleicht)
nicodjimenez

2

Es gibt wenige Dinge.

Erstens nicht /Graphaber./Graph

Zweitens, wenn Sie den TensorBoard-Rückruf verwenden, übergeben Sie immer Validierungsdaten, da diese ohne sie nicht starten würden.

Drittens, wenn Sie etwas anderes als skalare Zusammenfassungen verwenden möchten, sollten Sie nur die fitMethode verwenden, da dies fit_generatornicht funktioniert. Oder Sie können den Rückruf neu schreiben, um damit zu arbeiten fit_generator.

Um Rückrufe hinzuzufügen, fügen Sie sie einfach hinzu model.fit(..., callbacks=your_list_of_callbacks)



2

Erstellen Sie den Tensorboard-Rückruf:

from keras.callbacks import TensorBoard
from datetime import datetime
logDir = "./Graph/" + datetime.now().strftime("%Y%m%d-%H%M%S") + "/"
tb = TensorBoard(log_dir=logDir, histogram_freq=2, write_graph=True, write_images=True, write_grads=True)

Übergeben Sie den Tensorboard-Rückruf an den Fit-Aufruf:

history = model.fit(X_train, y_train, epochs=200, callbacks=[tb])

Wenn Sie beim Ausführen des Modells einen Keras-Fehler von erhalten

"Sie müssen einen Wert für den Platzhaltertensor eingeben"

Versuchen Sie, die Keras-Sitzung vor der Modellerstellung zurückzusetzen, indem Sie Folgendes tun:

import keras.backend as K
K.clear_session()

Es hat das Problem behoben You must feed a value for placeholder tensor. Irgendeine Idee warum?
Ruthvik Vaila
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.