Samouczek TensorBoard: Wizualizacja wykresu TensorFlow

⚡ Inteligentne podsumowanie

TensorBoard to wizualny interfejs użytkownika do przebiegów treningowych TensorFlow, który tworzy krzywe strat, wykresy modeli, histogramy wag i osadzenia. Ten przewodnik zapisuje pliki zdarzeń z estymatorem, a następnie otwiera pulpit nawigacyjny na porcie 6006.

  • 🔘 Pięć pulpitów nawigacyjnych: Skalary, wykresy, rozkłady, histogramy i rzutniki odczytują różne typy podsumowań.
  • ️ Katalog dziennika: Argument model_dir decyduje, gdzie TensorFlow zapisuje pliki events.out.tfevents.
  • ✅ Polecenie uruchomienia: Uruchom tensorboard –logdir=PATH, a następnie otwórz http://localhost:6006 w dowolnej przeglądarce.
  • 🧪 Współczynnik uczenia się: Nierówna krzywa strat sygnalizuje, że tempo jest zbyt wysokie, aby model mógł się zbiec.
  • 🛠️. TensorFlow 2: Wywołanie zwrotne Keras TensorBoard zastępuje rejestrowanie szacowania pokazane w oryginalnym przykładzie.
  • ⚠️ Rozwiązywanie problemów: Pusty pulpit nawigacyjny prawie zawsze oznacza, że ​​ścieżka do katalogu dziennika nie odpowiada przebiegowi treningowemu.

Samouczek TensorBoard: Wizualizacja wykresu TensorFlow

Co to jest TensorBoard?

TensorBoard to interfejs służący do wizualizacji grafu i innych narzędzi do zrozumienia, debugowania i optymalizacji modelu. Jest to narzędzie, które zapewnia pomiary i wizualizacje dla przepływu pracy uczenia maszynowego. Pomaga track metryk, takich jak strata i dokładność, wizualizacja wykresu modelu i projektowanie osadzenia w przestrzeniach o niższej liczbie wymiarów.

TensorBoard jest dostarczany z TensorFlow i działa jako mały lokalny serwer WWW, który odczytuje pliki zdarzeń zapisywane przez zadanie szkoleniowe na dysku.

Przykład wizualizacji wykresu TensorFlow przy użyciu TensorBoard

Poniższy obraz pochodzi z grafu TensorBoard, który wygenerujesz w tym samouczku. Jest to główny panel:

Panel skalarów TensorBoard pokazujący krzywą średniej straty wytrenowanego regresora DNN

Na poniższym obrazku widać panel wizualizacji wykresu TensorBoard. Panel zawiera różne zakładki, które są powiązane z poziomem informacji dodawanych podczas uruchamiania modelu.

Pasek nawigacyjny TensorBoard z kartami Skalary, Wykresy, Dystrybucje, Histogramy i Projektor

  • Skalary: Pokaż różne przydatne informacje podczas szkolenia modelu
  • Wykresy: Pokaż model
  • Histogram: Wyświetlanie wag za pomocą histogramu
  • Dystrybucja: Wyświetl rozkład ciężaru
  • Projektor: Pokaż analizę składowych głównych i algorytm T-SNE. Technika stosowana do redukcji wymiarowości.

W tym samouczku TensorBoard nauczysz się prostego głęboka nauka model, a wygenerowany przez niego wykres odczytuje się od dołu do góry.

Patrząc na wykres, można zrozumieć, jak działa ten model. Ponumerowane odznaki na poniższym zrzucie ekranu oznaczają te cztery etapy:

  1. Kolejkuj dane do modelu: Wprowadź do modelu ilość danych równą wielkości partii, tj. liczbę dostarczanych danych po każdej iteracji
  2. Podaj dane do tensorów
  3. Trenuj model
  4. Wyświetlaj liczbę partii podczas treningu. Zapisz model na dysku.

Wykres TensorFlow w TensorBoard z ponumerowanymi węzłami dla kolejki wejściowej, bloku dnn i operacji zapisu

Podstawową ideą TensorBoard jest to, że sieć neuronowa może zachowywać się jak czarna skrzynka, a do sprawdzenia, co się w niej znajduje, potrzebne jest narzędzie. Wyobraź sobie TensorBoard jako latarkę do zanurzenia się w sieci.

Pomaga zrozumieć zależności między operacjami, sposób obliczania wag, wyświetla funkcję straty i wiele innych przydatnych informacji. Gdy połączysz wszystkie te informacje, otrzymasz świetne narzędzie do debugowania i znajdowania sposobów na ulepszenie modelu.

Aby dać Ci pojęcie, jak użyteczny może być wykres TensorBoard, spójrz na dwie poniższe krzywe strat:

Dwie krzywe strat TensorBoard obok siebie porównujące model, który się nie uczy, z modelem, który się zbiega

Sieć neuronowa decyduje, jak połączyć różne neurony i ile warstw jest potrzebnych, aby model mógł przewidzieć wynik. Po zdefiniowaniu architektury konieczne jest nie tylko wytrenowanie modelu, ale także metryka mierząca dokładność prognozy. Ta metryka nazywa się funkcją straty, a jej celem jest jej minimalizacja, co po prostu oznacza, że ​​model popełnia mniej błędów.

Każdy algorytm treningowy powtarza obliczenia wielokrotnie, aż strata osiągnie bardziej płaską linię. Minimalizacja straty wymaga również współczynnika uczenia się, czyli szybkości, z jaką model się uczy. Zbyt wysoki współczynnik uczenia się sprawi, że model nigdy nie będzie miał czasu na naukę: tak wygląda wykres po lewej stronie, gdzie linia porusza się w górę i w dół, ponieważ model w rzeczywistości zgaduje. Wykres po prawej stronie pokazuje spadek straty w kolejnych iteracjach, aż do spłaszczenia krzywej, co oznacza, że ​​model znalazł rozwiązanie.

TensorBoard to doskonałe narzędzie do wizualizacji takich metryk i identyfikowania potencjalnych problemów. Sieć neuronowa może potrzebować godzin lub tygodni, zanim znajdzie rozwiązanie, a TensorBoard odświeża metryki w trakcie działania zadania. Nie musisz więc czekać do końca, aby sprawdzić, czy model trenuje poprawnie: otwórz TensorBoard, sprawdź, jak przebiega trenowanie i w razie potrzeby wprowadź odpowiednie zmiany.

Jak korzystać z TensorBoard?

W tej sekcji dowiesz się, jak otworzyć TensorBoard z poziomu terminala na macOS i z wiersza poleceń WindowsW tym przypadku skupiamy się na narzędziu, a nie na modelu, dlatego kod szkoleniowy jest celowo krótki.

Najpierw musisz zaimportować biblioteki, z których będziesz korzystać podczas szkolenia.

## Import the library
import tensorflow as tf
import numpy as np

Tworzysz dane. Są to tablice składające się z 10 000 wierszy i 5 kolumn.

X_train = (np.random.sample((10000,5)))
y_train =  (np.random.sample((10000,1)))
X_train.shape

Wydajność

(10000, 5)

Poniższy kod przekształca dane i tworzy model.

Zwróć uwagę, że współczynnik uczenia się wynosi 0.1. Jeśli zmienisz go na wyższą wartość, model nie znajdzie rozwiązania. Tak właśnie było po lewej stronie powyższego rysunku.

W przykładzie wykorzystano estymator TensorFlow, interfejs API wysokiego poziomu, który opakowuje obliczenia matematyczne. Estymatory należą do interfejsu API TensorFlow 1.x, więc dwa poniższe fragmenty kodu działają w instalacji 1.x lub poprzez tf.compat.v1 przestrzeń nazw.

Aby utworzyć pliki dziennika, należy określić ścieżkę. Można to zrobić za pomocą argumentu model_dir.

W poniższym przykładzie TensorBoard model jest przechowywany w katalogu roboczym, czyli w tym samym miejscu, w którym jest przechowywany notatnik lub Python Plik. W tej ścieżce TensorFlow utworzy folder o nazwie „train” z folderem podrzędnym o nazwie „linreg”.

feature_columns = [
      tf.feature_column.numeric_column('x', shape=X_train.shape[1:])]
DNN_reg = tf.estimator.DNNRegressor(feature_columns=feature_columns,
# Indicate where to store the log file    
     model_dir='train/linreg',    
     hidden_units=[500, 300],    
     optimizer=tf.train.ProximalAdagradOptimizer(      
          learning_rate=0.1,      
          l1_regularization_strength=0.001    
      )
)

Wydajność

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {&#x27;_model_dir': 'train/linreg', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1818e63828>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Ostatnim krokiem tego przykładu wizualizacji grafu TensorFlow jest trenowanie modelu. Podczas trenowania TensorFlow zapisuje informacje w katalogu modelu.

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(    
     x={"x": X_train},    
     y=y_train, shuffle=False,num_epochs=None)
DNN_reg.train(train_input,steps=3000)

Wydajność

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train/linreg/model.ckpt.
INFO:tensorflow:loss = 40.060104, step = 1
INFO:tensorflow:global_step/sec: 197.061
INFO:tensorflow:loss = 10.62989, step = 101 (0.508 sec)
INFO:tensorflow:global_step/sec: 172.487
INFO:tensorflow:loss = 11.255318, step = 201 (0.584 sec)
INFO:tensorflow:global_step/sec: 193.295
INFO:tensorflow:loss = 10.604872, step = 301 (0.513 sec)
INFO:tensorflow:global_step/sec: 175.378
INFO:tensorflow:loss = 10.090343, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 209.737
INFO:tensorflow:loss = 10.057928, step = 501 (0.476 sec)
INFO:tensorflow:global_step/sec: 171.646
INFO:tensorflow:loss = 10.460144, step = 601 (0.583 sec)
INFO:tensorflow:global_step/sec: 192.269
INFO:tensorflow:loss = 10.529617, step = 701 (0.519 sec)
INFO:tensorflow:global_step/sec: 198.264
INFO:tensorflow:loss = 9.100082, step = 801 (0.504 sec)
INFO:tensorflow:global_step/sec: 226.842
INFO:tensorflow:loss = 10.485607, step = 901 (0.441 sec)
INFO:tensorflow:global_step/sec: 152.929
INFO:tensorflow:loss = 10.052481, step = 1001 (0.655 sec)
INFO:tensorflow:global_step/sec: 166.745
INFO:tensorflow:loss = 11.320213, step = 1101 (0.600 sec)
INFO:tensorflow:global_step/sec: 161.854
INFO:tensorflow:loss = 9.603306, step = 1201 (0.619 sec)
INFO:tensorflow:global_step/sec: 179.074
INFO:tensorflow:loss = 11.110269, step = 1301 (0.556 sec)
INFO:tensorflow:global_step/sec: 202.776
INFO:tensorflow:loss = 11.929443, step = 1401 (0.494 sec)
INFO:tensorflow:global_step/sec: 144.161
INFO:tensorflow:loss = 11.951693, step = 1501 (0.694 sec)
INFO:tensorflow:global_step/sec: 154.144
INFO:tensorflow:loss = 8.620987, step = 1601 (0.649 sec)
INFO:tensorflow:global_step/sec: 151.094
INFO:tensorflow:loss = 10.666125, step = 1701 (0.663 sec)
INFO:tensorflow:global_step/sec: 193.644
INFO:tensorflow:loss = 11.0349865, step = 1801 (0.516 sec)
INFO:tensorflow:global_step/sec: 189.707
INFO:tensorflow:loss = 9.860596, step = 1901 (0.526 sec)
INFO:tensorflow:global_step/sec: 176.423
INFO:tensorflow:loss = 10.695, step = 2001 (0.567 sec)
INFO:tensorflow:global_step/sec: 213.066
INFO:tensorflow:loss = 10.426752, step = 2101 (0.471 sec)
INFO:tensorflow:global_step/sec: 220.975
INFO:tensorflow:loss = 10.594796, step = 2201 (0.452 sec)
INFO:tensorflow:global_step/sec: 219.289
INFO:tensorflow:loss = 10.4212265, step = 2301 (0.456 sec)
INFO:tensorflow:global_step/sec: 215.123
INFO:tensorflow:loss = 9.668612, step = 2401 (0.465 sec)
INFO:tensorflow:global_step/sec: 175.65
INFO:tensorflow:loss = 10.009649, step = 2501 (0.569 sec)
INFO:tensorflow:global_step/sec: 206.962
INFO:tensorflow:loss = 10.477722, step = 2601 (0.483 sec)
INFO:tensorflow:global_step/sec: 229.627
INFO:tensorflow:loss = 9.877638, step = 2701 (0.435 sec)
INFO:tensorflow:global_step/sec: 195.792
INFO:tensorflow:loss = 10.274586, step = 2801 (0.512 sec)
INFO:tensorflow:global_step/sec: 176.803
INFO:tensorflow:loss = 10.061047, step = 2901 (0.566 sec)
INFO:tensorflow:Saving checkpoints for 3000 into train/linreg/model.ckpt.
INFO:tensorflow:Loss for final step: 10.73032.

<tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1818e63630>

W TensorFlow 2 to samo zadanie wykonuje wywołanie zwrotne Keras TensorBoard, które zapisuje graf i metryki dla każdej epoki bez żadnego kodu estymatora:

logdir = "logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model.fit(train_images, train_labels, epochs=5,
          callbacks=[tensorboard_callback])

Po zakończeniu przebiegu katalog dziennika zawiera plik punktu kontrolnego, graph.pbtxt plik i jeden lub więcej events.out.tfevents pliki — dokładnie to, co odczytuje TensorBoard.

Dla litu szacuje się macOS już nam zaufało

Widok Findera poniżej pokazuje nowy folder train/linreg utworzony w katalogu roboczym.

macOS lista plików pokazująca foldery dziennika pociągu i linreg z plikami punktów kontrolnych, zdarzeń i graph.pbtxt

Dla litu szacuje się Windows już nam zaufało

On Windows te same pliki pojawiają się pod ścieżką, którą podałeś do model_dir, jak zaznaczono na pasku adresu.

Windows Widok eksploratora folderu LINREG pociągu zawierającego pliki zdarzeń i punktów kontrolnych TensorFlow

Ten sam format pliku zdarzeń jest generowany przez PyTorch, więc pulpit nawigacyjny nie jest ograniczony do uruchomień TensorFlow.

Teraz, gdy masz już zapisane zdarzenia w dzienniku, możesz otworzyć TensorBoard. TensorBoard domyślnie działa na porcie 6006 (Jupyter używa portu 8888). Użyj terminala na macOS lub monit Anaconda na Windows.

Dla litu szacuje się macOS już nam zaufało

# Different for you
cd /Users/Guru99/tuto_TF
source activate hello-tf!

Notatnik jest przechowywany w ścieżce /Users/Guru99/tuto_TF

Dla litu szacuje się Windows już nam zaufało

cd C:\Users\Admin\Anaconda3
activate hello-tf

Notatnik jest przechowywany w ścieżce C:\Users\Admin\Anaconda3

Aby uruchomić TensorBoard, uruchom następujące polecenie w tym katalogu.

Dla litu szacuje się macOS już nam zaufało

tensorboard --logdir=./train/linreg

Dla litu szacuje się Windows już nam zaufało

tensorboard --logdir=.\train\linreg

TensorBoard jest następnie udostępniany pod adresem http://localhost:6006

Flaga Co kontroluje
--logdir Katalog zawierający pliki zdarzeń. To jedyna wymagana flaga.
--port Port do obsługi. Domyślnie jest to 6006; należy to zmienić, jeśli wcześniejsza sesja nadal obsługuje ten port.
--bind_all Działaj na każdym interfejsie sieciowym. TensorBoard domyślnie łączy się tylko z localhost, więc zdalny dostęp wymaga tej flagi i nie można jej łączyć z --host.
--reload_interval Jak często (w sekundach) katalog dziennika jest ponownie skanowany w celu znalezienia nowych danych.
--logdir_spec Starsza wersja zapasowa akceptująca kilka ścieżek rozdzielonych przecinkami; --logdir nie obsługuje już tego formularza.

tensorboard dev Podpolecenie nie działa już: hostowana usługa TensorBoard.dev została wyłączona 1 stycznia 2024 r. Użytkowanie lokalne nie jest zakłócane.

Na niektórych komputerach konsola wyświetla nazwę hosta zamiast localhost, jak w poniższym wierszu poleceń Anacondy. Oba adresy otwierają ten sam panel.

Wiersz Anacondy uruchamia polecenie tensorboard i wyświetla adres serwera na porcie 6006

Skopiuj i wklej adres do swojej ulubionej przeglądarki. Powinieneś zobaczyć poniższy panel Scalars.

Panel TensorBoard Scalars otwiera się w przeglądarce po prawidłowym załadowaniu katalogu logów

Jeśli zamiast tego zobaczysz coś takiego:

Strona błędu TensorBoard nie została odnaleziona. Nie znaleziono plików definicji wykresu.

Oznacza to, że TensorBoard nie może znaleźć pliku dziennika. Upewnij się, że wskazujesz cd do właściwej ścieżki lub sprawdź, czy zdarzenie w dzienniku rzeczywiście zostało utworzone. Jeśli nie, uruchom ponownie kod szkoleniowy.

Jeśli chcesz zamknąć TensorBoard, naciśnij CTRL+C w oknie terminala.

Wskazówka: sprawdź w wierszu poleceń Anacondy, jaki jest bieżący katalog roboczy.

Monit Anacondy pokazujący aktywne środowisko hello-tf i bieżący katalog roboczy

Na powyższym zrzucie ekranu monit znajduje się w folderze C:\Users\Admin, więc plik dziennika powinien zostać utworzony w tym folderze.

FAQ

Zakończony przebieg pozostawia indeks punktu kontrolnego, jeden lub więcej plików model.ckpt, plik graph.pbtxt i co najmniej jeden plik events.out.tfevents. TensorBoard odczytuje tylko pliki zdarzeń; punkty kontrolne istnieją, aby trening mógł zostać wznowiony od miejsca, w którym został przerwany.

Tak. PyTorch wysyła podsumowanieWriter który emituje ten sam format pliku zdarzeń, więc to samo polecenie tensorboard –logdir renderuje pulpit nawigacyjny. Nic na serwerze się nie zmienia — zmienia się tylko biblioteka generująca podsumowania.

Nie. Usługa hostowana została zamknięta 1 stycznia 2024 r., a podpolecenie tensorboard dev zwraca teraz błąd. Udostępnij wyniki, uruchamiając TensorBoard w notatniku, takim jak Google Colab lub eksportując wykresy w formacie CSV lub JSON.

Przypisz każdemu przebiegowi własny podfolder pod współdzielonym folderem nadrzędnym, a następnie wskaż folder nadrzędny poleceniem –logdir. Każdy podfolder pojawi się jako osobny przebieg w lewym panelu, a krzywe będą rysowane na tych samych osiach, z zaznaczonym polem wyboru.

Graf na poziomie operacji to widok domyślny, który pokazuje, jak TensorFlow interpretuje program, rysowany od dołu do góry. Wybranie znacznika keras powoduje przełączenie na graf koncepcyjny, który pokazuje same warstwy modelu i jest łatwiejszy do sprawdzenia pod kątem zgodności z projektem.

Zautomatyzowane skanowanie generuje dziesiątki przebiegów jednocześnie, dzięki czemu pulpit staje się narzędziem porównawczym, a nie monitorem pojedynczych przebiegów. Wtyczka HParams rejestruje każdą konfigurację wraz z jej metrykami, umożliwiając sortowanie prób zamiast odczytywania krzywych pojedynczo.

Drugi pilot GitHub Szybko tworzy wywołanie zwrotne i szablonowy kod skryptu podsumowującego. Traktuj wynik jako szkic: często łączy on API TensorFlow 1.x i 2.x, więc przed uruchomieniem kodu sprawdź każdą nazwę z aktualną dokumentacją.

Albo nie zapisano pliku zdarzeń, albo ścieżka przekazana do –logdir nie jest zgodna ze ścieżką użytą przez zadanie szkoleniowe. Sprawdź, czy w tym folderze znajduje się plik events.out.tfevents i na Windows uruchom TensorBoard z tej samej litery dysku.

Podsumuj ten post następująco: