Come posso usare il callback Tensorboard di Keras?


143

Ho costruito una rete neurale con Keras. Visualizzerei i suoi dati tramite Tensorboard, quindi ho utilizzato:

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

come spiegato in keras.io . Quando eseguo il callback ricevo <keras.callbacks.TensorBoard at 0x7f9abb3898>, ma non ottengo alcun file nella mia cartella "Graph". C'è qualcosa di sbagliato nel modo in cui ho usato questo callback?


3
Suggerirei di impostarlo histogram_freqsu 1. "histogram_freq: frequenza (in epoche) alla quale calcolare gli istogrammi di attivazione per i livelli del modello. Se impostato su 0, gli istogrammi non verranno calcolati."
Matt Kleinsmith il

10
Fai attenzione: "/ Graph" crea una directory nella directory root, mentre "./Graph" ne crea una nella directory di lavoro.
Matt Kleinsmith il

@MattKleinsmith Se impostato su 0, solo gli istogrammi di attivazione e ponderazione per i livelli del modello non verranno calcolati tramite i dati di convalida, le metriche verranno comunque registrate.
BugKiller,

Penso che sia meglio dare nome univoco allo sguardo logdir a stackoverflow.com/a/54949146/1179925
mrgloom

Risposte:


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

Questa riga crea un oggetto Callens Tensorboard, è necessario acquisire quell'oggetto e assegnarlo alla fitfunzione del modello.

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

In questo modo hai assegnato il tuo oggetto callback alla funzione. Verrà eseguito durante l'allenamento e genererà file che possono essere utilizzati con tensorboard.

Se vuoi visualizzare i file creati durante l'allenamento, esegui nel tuo terminale

tensorboard --logdir path_to_current_dir/Graph 

Spero che questo ti aiuti !


L'ho usato con il seguente errore quando write_images = False
abdul qayyum

InvalidArgumentError (vedi sopra per traceback): il tensore deve essere 4-D con l'ultima dim 1, 3 o 4, non [1,3,3,256,256,1] [[Nodo: conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <type: uint8 shape: [4] valori: 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

E qualcosa che dice segnaposto manca dtype = float quando True Any Idea?
abdul qayyum,

2
La scheda Scalari è ancora vuota, anche se posso vedere l'architettura del mio modello nella scheda Grafici?
iratzhash,

1
questo produce solo scalari per perdita di allenamento e precisione. come si fa lo stesso per validation_data che viene passato alla funzione fit?
Utku Ufuk,

46

Ecco come si utilizza il callback TensorBoard :

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
C'è un modo per strutturare meglio l'output del tensorboard? Keras fa qualche ottimizzazione al riguardo?
Nickpick,

2
@nickpick Non so cosa intendi. Ma penso che questo potrebbe essere un candidato per un'altra domanda.
Martin Thoma,


importante notare che histogram_freq=0è impostato se tensorboard non registra alcun istogramma di tf.summary.histogram- altrimenti histogram_freqNON è uguale a 0!
Agile Bean,

20

Modificare

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

per

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

e imposta il tuo modello

tbCallback.set_model(model)

Corri nel tuo terminale

tensorboard  --logdir Graph/

Ho capito AttributeError: 'TensorBoard' object has no attribute 'set_model'.
Fábio Perez,

15

Se stai lavorando con la libreria Keras e vuoi usare la tensorboard per stampare i tuoi grafici di precisione e altre variabili, allora di seguito sono i passaggi da seguire.

passaggio 1: inizializzare la libreria di callback di keras per importare la tensorboard utilizzando il comando seguente

from keras.callbacks import TensorBoard

passaggio 2: includere il comando seguente nel programma appena prima del comando "model.fit ()".

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

Nota: utilizzare "./graph". Genererà la cartella dei grafici nella directory di lavoro corrente, evitando di usare "/ graph".

passaggio 3: includere il callback di Tensorboard in "model.fit ()". L'esempio è riportato di seguito.

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

passaggio 4: eseguire il codice e verificare se la cartella del grafico è presente nella directory di lavoro. se i codici sopra funzionano correttamente avrai la cartella "Graph" nella tua directory di lavoro.

passaggio 5: aprire Terminale nella directory di lavoro e digitare il comando seguente.

tensorboard --logdir ./Graph

passaggio 6: ora apri il browser web e inserisci l'indirizzo qui sotto.

http://localhost:6006

Dopo aver inserito, si aprirà la pagina Tensorbaord in cui è possibile vedere i grafici delle diverse variabili.


importante notare che histogram_freq=0è impostato se tensorboard non registra alcun istogramma di tf.summary.histogram- altrimenti histogram_freqNON è uguale a 0!
Agile Bean,

9

Ecco un po 'di codice:

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)

Fondamentalmente, histogram_freq=2è il parametro più importante da mettere a punto quando si chiama questo callback: imposta un intervallo di epoche per chiamare il callback, con l'obiettivo di generare meno file sui dischi.

Ecco quindi un esempio di visualizzazione dell'evoluzione dei valori per l'ultima convoluzione durante l'allenamento una volta visto in TensorBoard, sotto la scheda "istogrammi" (e ho trovato la scheda "distribuzioni" per contenere grafici molto simili, ma capovolto sul lato):

monitoraggio pesi tensorboard

Nel caso in cui desideri vedere un esempio completo nel contesto, puoi fare riferimento a questo progetto open source: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


Ho annullato il voto perché gran parte di questo è in realtà domande e non una risposta alla domanda. Non porre nuove domande nelle risposte, che si tratti di una parte o dell'intero scopo di una risposta.
Zoe,

Ho modificato la domanda per rimuovere ciò che hai menzionato. In effetti, questo callback è molto difficile da usare correttamente dalla documentazione al momento in cui ho risposto.
Guillaume Chevalier,

Per rispondere a "Come posso usare il callback TensorBoard di Keras?", Tutte le altre risposte sono incomplete e rispondono solo al piccolo contesto della domanda, ad esempio nessuno affronta gli abbinamenti. Almeno, avevo documentato potenziali errori o cose da evitare nella mia risposta. Penso di aver sollevato domande importanti che nessuno ritiene ancora di pensare ancora. Sto ancora aspettando una risposta completa. Anche questo richiamo è mal documentato, come il cancro.
Guillaume Chevalier,

4

Se stai usando google-colab la visualizzazione semplice del grafico sarebbe:

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

Hai scritto log_dir='/Graph'intendevi ./Graphinvece? L'hai inviato /home/user/Graphal momento.


1
Perché /Graphcreare una cartella nella home directory dell'utente invece di utilizzarla /Graphdirettamente?
Michael Mior,

2

Dovresti dare un'occhiata a Losswise ( https://losswise.com ), ha un plug-in per Keras che è più facile da usare rispetto a Tensorboard e ha alcune belle funzionalità extra. Con Losswise useresti semplicemente from losswise.libs import LosswiseKerasCallbacke poi callback = LosswiseKerasCallback(tag='my fancy convnet 1')andrai bene (vedi https://docs.losswise.com/#keras-plugin ).


7
Disclaimer: OP è il fondatore di Losswise, che è un prodotto a pagamento (anche se con un livello gratuito piuttosto generoso)
Michael Mior,

@MichaelMior ha ragione, anche se non è ancora un prodotto a pagamento e potrebbe non esserlo mai (a parte forse con le licenze prem in futuro)
nicodjimenez,

2

Ci sono poche cose

Primo, no /Graphma./Graph

In secondo luogo, quando si utilizza il callback TensorBoard, passare sempre i dati di convalida, perché senza di essa non si avvia.

In terzo luogo, se si desidera utilizzare qualcosa di diverso dai riepiloghi scalari, utilizzare il fitmetodo solo perché fit_generatornon funzionerà. Oppure puoi riscrivere il callback con cui lavorare fit_generator.

Per aggiungere callback, basta aggiungerlo a model.fit(..., callbacks=your_list_of_callbacks)



2

Creare il callback Tensorboard:

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)

Passare il callback Tensorboard alla chiamata adatta:

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

Quando si esegue il modello, se viene visualizzato un errore Keras di

"Devi inserire un valore per il tensore del segnaposto"

prova a reimpostare la sessione di Keras prima della creazione del modello eseguendo:

import keras.backend as K
K.clear_session()

E 'risolto il problema, You must feed a value for placeholder tensor. Qualche idea sul perché?
Ruthvik Vaila,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.