Jak używać wywołania zwrotnego Tensorboard w Keras?


143

Z Kerasem zbudowałem sieć neuronową. Jego dane wizualizowałbym za pomocą Tensorboard, dlatego wykorzystałem:

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

jak wyjaśniono w keras.io . Kiedy uruchamiam wywołanie zwrotne, które otrzymuję <keras.callbacks.TensorBoard at 0x7f9abb3898>, ale nie otrzymuję żadnego pliku w moim folderze „Graph”. Czy jest coś nie tak w sposobie użycia tego wywołania zwrotnego?


3
Proponuję ustawienie histogram_freqdo 1. "histogram_freq: częstotliwość (w epokach), przy której należy obliczyć histogramy aktywacji dla warstw modelu. Jeśli jest ustawiona na 0, histogramy nie będą obliczane."
Matt Kleinsmith

10
Uważaj: „/ Graph” tworzy katalog w katalogu głównym, a „./Graph” tworzy katalog w katalogu roboczym.
Matt Kleinsmith,

@MattKleinsmith Jeśli ustawiona na 0, tylko histogramy aktywacji i wagi dla warstw modelu nie będą obliczane za pomocą danych walidacyjnych, metryki nadal będą rejestrowane.
BugKiller,

Myślę, że lepiej jest nadać logdir unikalną nazwę, spójrz na stackoverflow.com/a/54949146/1179925
mrgloom

Odpowiedzi:


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

Ta linia tworzy obiekt Callback Tensorboard, powinieneś przechwycić ten obiekt i przekazać go fitfunkcji twojego modelu.

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

W ten sposób przekazałeś funkcję wywołania zwrotnego. Zostanie uruchomiony podczas szkolenia i wygeneruje pliki, których można używać z tensorboard.

Jeśli chcesz zwizualizować pliki utworzone podczas treningu, uruchom w swoim terminalu

tensorboard --logdir path_to_current_dir/Graph 

Mam nadzieję że to pomoże !


Użyłem tego z następującym błędem, gdy write_images = False
abdul qayyum

InvalidArgumentError (patrz wyżej dla śledzenia): Tensor musi być 4-D z ostatnim dim 1, 3 lub 4, a nie [1,3,3,256,256,1] [[Node: conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <type: uint8 shape: [4] wartości: 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

I brakuje czegoś mówiącego, że symbol zastępczy dtype = float, gdy True Any Idea?
abdul qayyum

2
Karta Skalary jest nadal pusta, chociaż widzę architekturę modelu na karcie Wykresy?
iratzhash

1
tworzy to tylko skalary dla utraty treningu i dokładności. jak zrobić to samo dla validation_data, które są przekazywane do funkcji fit?
Utku Ufuk

46

Oto jak używasz wywołania zwrotnego 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
Czy istnieje sposób na lepsze ustrukturyzowanie wyjścia tensorboardu? Czy Keras przeprowadza jakąś optymalizację w tym zakresie?
Nickpick,

2
@nickpick Nie wiem, co masz na myśli. Ale myślę, że to może być kandydat na inne pytanie.
Martin Thoma,


ważne jest, aby pamiętać, że histogram_freq=0jest ustawiane, jeśli tensorboard nie rejestruje żadnego histogramu według tf.summary.histogram- w przeciwnym razie histogram_freqNIE jest równe 0!
Agile Bean

20

Zmiana

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

do

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

i ustaw swój model

tbCallback.set_model(model)

Uruchom swój terminal

tensorboard  --logdir Graph/

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

15

Jeśli pracujesz z biblioteką Keras i chcesz użyć tensorboard do wydrukowania wykresów dokładności i innych zmiennych, poniżej znajdują się kroki, które należy wykonać.

Krok 1: Zainicjuj bibliotekę wywołań zwrotnych keras, aby zaimportować tensorboard za pomocą poniższego polecenia

from keras.callbacks import TensorBoard

krok 2: Dołącz poniższą komendę do swojego programu tuż przed komendą "model.fit ()".

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

Uwaga: użyj „./graph”. Wygeneruje folder wykresów w Twoim bieżącym katalogu roboczym, unikaj używania "/ graph".

krok 3: Uwzględnij wywołanie zwrotne Tensorboard w „model.fit ()”. Przykład znajduje się poniżej.

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

krok 4: Uruchom kod i sprawdź, czy folder z wykresami znajduje się w katalogu roboczym. jeśli powyższe kody działają poprawnie, w katalogu roboczym będziesz mieć folder „Graph”.

krok 5: Otwórz Terminal w katalogu roboczym i wpisz poniższe polecenie.

tensorboard --logdir ./Graph

Krok 6: Teraz otwórz przeglądarkę internetową i wprowadź poniższy adres.

http://localhost:6006

Po wejściu otworzy się strona Tensorbaord, na której możesz zobaczyć wykresy różnych zmiennych.


ważne jest, aby pamiętać, że histogram_freq=0jest ustawiane, jeśli tensorboard nie rejestruje żadnego histogramu według tf.summary.histogram- w przeciwnym razie histogram_freqNIE jest równe 0!
Agile Bean

9

Oto kod:

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)

Zasadniczo histogram_freq=2jest to najważniejszy parametr do dostrojenia podczas wywoływania tego wywołania zwrotnego: ustawia interwał epok do wywołania wywołania zwrotnego, aby wygenerować mniej plików na dyskach.

Oto przykładowa wizualizacja ewolucji wartości ostatniego splotu w trakcie treningu, raz widziana w TensorBoard, w zakładce „histogramy” (i znalazłem zakładkę „rozkłady” zawierającą bardzo podobne wykresy, ale odwrócone z boku):

monitorowanie ciężaru tensorboardu

Jeśli chcesz zobaczyć pełny przykład w kontekście, możesz odnieść się do tego projektu open source: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


Głosowałem w dół, ponieważ duża część z tego to właściwie pytania, a nie odpowiedź na pytanie. Nie zadawaj nowych pytań w odpowiedziach, niezależnie od tego, czy jest to część, czy cały cel odpowiedzi.
Zoe,

Zmodyfikowałem pytanie, aby usunąć wspomniane przez Ciebie informacje. W rzeczywistości to wywołanie zwrotne jest bardzo trudne do prawidłowego użycia z dokumentacji w momencie, w którym odpowiadałem.
Guillaume Chevalier

Aby odpowiedzieć na pytanie „Jak używać wywołania zwrotnego TensorBoard w Keras?”, Wszystkie pozostałe odpowiedzi są niepełne i odpowiadają tylko niewielkiemu kontekstowi pytania - na przykład nikt nie zajmuje się osadzaniem. Przynajmniej udokumentowałem potencjalne błędy lub rzeczy, których należy unikać w mojej odpowiedzi. Myślę, że poruszyłem ważne pytania, o których nikt nawet nie myśli. Wciąż czekam na pełną odpowiedź. To oddzwonienie też jest źle udokumentowane, jak rak.
Guillaume Chevalier

4

Jeśli używasz google-colab, prosta wizualizacja wykresu wyglądałaby tak:

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

Napisałeś log_dir='/Graph'czy miałeś na myśli ./Graphzamiast tego? Wysłałeś to /home/user/Graphw tej chwili do.


1
Po co /Graphtworzyć folder w katalogu domowym użytkownika, zamiast używać go /Graphbezpośrednio?
Michael Mior

2

Powinieneś sprawdzić Losswise ( https://losswise.com ), ma wtyczkę do Keras, która jest łatwiejsza w użyciu niż Tensorboard i ma kilka fajnych dodatkowych funkcji. Z Losswise po prostu użyjesz, from losswise.libs import LosswiseKerasCallbacka potem callback = LosswiseKerasCallback(tag='my fancy convnet 1')i jesteś gotowy (patrz https://docs.losswise.com/#keras-plugin ).


7
Zastrzeżenie: OP jest założycielem Losswise, który jest płatnym produktem (chociaż z dość hojnym poziomem darmowym)
Michael Mior

@MichaelMior ma rację, chociaż nie jest to jeszcze płatny produkt i może nigdy nie być (może poza licencjami
premii

2

Jest kilka rzeczy.

Po pierwsze, /Graphale./Graph

Po drugie, kiedy używasz wywołania zwrotnego TensorBoard, zawsze przekazuj dane walidacyjne, ponieważ bez tego nie uruchomiłoby się.

Po trzecie, jeśli chcesz używać czegokolwiek poza podsumowaniami skalarnymi, powinieneś używać tylko tej fitmetody, ponieważ fit_generatornie zadziała. Lub możesz przepisać wywołanie zwrotne do pracy fit_generator.

Aby dodać wywołania zwrotne, po prostu dodaj je do model.fit(..., callbacks=your_list_of_callbacks)



2

Utwórz wywołanie zwrotne 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)

Przekaż wywołanie zwrotne Tensorboard do połączenia fit:

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

Jeśli podczas uruchamiania modelu zostanie wyświetlony błąd Keras o wartości

„Musisz podać wartość zastępczego tensora”

spróbuj zresetować sesję Keras przed utworzeniem modelu, wykonując:

import keras.backend as K
K.clear_session()

To ustalone problemu, You must feed a value for placeholder tensor. Masz jakiś pomysł, dlaczego?
Ruthvik Vaila
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.