CNTK - monitorowanie modelu

W tym rozdziale zrozumiemy, jak monitorować model w CNTK.

Wprowadzenie

W poprzednich sekcjach dokonaliśmy weryfikacji naszych modeli NN. Ale czy konieczne i możliwe jest również monitorowanie naszego modelu podczas treningu?

Tak, już używaliśmy ProgressWriterdo monitorowania naszego modelu, a sposobów na to jest znacznie więcej. Zanim zagłębimy się w sposoby, najpierw przyjrzyjmy się, jak działa monitorowanie w CNTK i jak możemy go wykorzystać do wykrywania problemów w naszym modelu NN.

Callback w CNTK

W rzeczywistości podczas szkolenia i walidacji CNTK pozwala nam określić wywołania zwrotne w kilku miejscach w API. Najpierw przyjrzyjmy się bliżej, kiedy CNTK wywołuje wywołania zwrotne.

Kiedy CNTK wywołuje wywołania zwrotne?

CNTK będzie wywoływać wywołania zwrotne podczas treningu i zestawu testowego, gdy:

  • Minizestaw jest zakończony.

  • Pełne przeglądanie zbioru danych jest wykonywane podczas treningu.

  • Część testów została zakończona.

  • Pełne przeglądanie zbioru danych jest zakończone podczas testowania.

Określanie wywołań zwrotnych

Pracując z CNTK, możemy określić wywołania zwrotne w kilku miejscach w API. Na przykład -

Kiedy pociąg dzwoni na funkcję straty?

Tutaj, gdy wywołujemy train na funkcji straty, możemy określić zestaw wywołań zwrotnych za pomocą argumentu callback w następujący sposób -

training_summary=loss.train((x_train,y_train),
parameter_learners=[learner],
callbacks=[progress_writer]),
minibatch_size=16, max_epochs=15)

Podczas pracy ze źródłami minibatchów lub przy użyciu ręcznej pętli minibatch

W takim przypadku możemy określić wywołania zwrotne w celu monitorowania podczas tworzenia pliku Trainer w następujący sposób -

from cntk.logging import ProgressPrinter
callbacks = [
   ProgressPrinter(0)
]
Trainer = Trainer(z, (loss, metric), learner, [callbacks])

Różne narzędzia do monitorowania

Przeanalizujmy różne narzędzia do monitorowania.

ProgressPrinter

Czytając ten samouczek, znajdziesz ProgressPrinterjako najczęściej używane narzędzie do monitorowania. Niektóre cechyProgressPrinter narzędzie monitorujące są -

ProgressPrinterklasa implementuje podstawowe rejestrowanie oparte na konsoli w celu monitorowania naszego modelu. Może logować się na dysk, który chcemy.

Szczególnie przydatne podczas pracy w rozproszonym scenariuszu szkoleniowym.

Jest to również bardzo przydatne podczas pracy w scenariuszu, w którym nie możemy zalogować się na konsoli, aby zobaczyć wyjście naszego programu w Pythonie.

Za pomocą poniższego kodu możemy stworzyć instancję ProgressPrinter-

ProgressPrinter(0, log_to_file=’test.txt’)

Otrzymamy na wyjściu coś, co widzieliśmy we wcześniejszych sekcjach -

Test.txt
CNTKCommandTrainInfo: train : 300
CNTKCommandTrainInfo: CNTKNoMoreCommands_Total : 300
CNTKCommandTrainBegin: train
-------------------------------------------------------------------
average since average since examples
loss last metric last
------------------------------------------------------
Learning rate per minibatch: 0.1
1.45 1.45 -0.189 -0.189 16
1.24 1.13 -0.0382 0.0371 48
[………]

TensorBoard

Jedną z wad korzystania z ProgressPrinter jest to, że nie możemy uzyskać dobrego obrazu tego, jak trudne są straty i postęp pomiaru w czasie. TensorBoardProgressWriter to świetna alternatywa dla klasy ProgressPrinter w CNTK.

Przed użyciem musimy go najpierw zainstalować za pomocą następującego polecenia -

pip install tensorboard

Teraz, aby korzystać z TensorBoard, musimy skonfigurować TensorBoardProgressWriter w naszym kodzie szkolenia w następujący sposób -

import time
from cntk.logging import TensorBoardProgressWriter
tensorbrd_writer = TensorBoardProgressWriter(log_dir=’logs/{}’.format(time.time()),freq=1,model=z)

Dobrą praktyką jest włączenie metody close TensorBoardProgressWriter przykład po zakończeniu szkolenia NNModel.

Możemy wizualizować TensorBoard logowanie danych za pomocą polecenia -

Tensorboard –logdir logs