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.
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:
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.
- 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:
- Kolejkuj dane do modelu: Wprowadź do modelu ilość danych równą wielkości partii, tj. liczbę dostarczanych danych po każdej iteracji
- Podaj dane do tensorów
- Trenuj model
- Wyświetlaj liczbę partii podczas treningu. Zapisz model na dysku.
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:
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: {'_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.
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.
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.
Skopiuj i wklej adres do swojej ulubionej przeglądarki. Powinieneś zobaczyć poniższy panel Scalars.
Jeśli zamiast tego zobaczysz coś takiego:
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.
Na powyższym zrzucie ekranu monit znajduje się w folderze C:\Users\Admin, więc plik dziennika powinien zostać utworzony w tym folderze.










