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