CNTK - мониторинг модели
В этой главе мы поймем, как отслеживать модель в CNTK.
Введение
В предыдущих разделах мы провели некоторую проверку наших моделей NN. Но, нужно ли и возможно ли контролировать нашу модель во время обучения?
Да, мы уже использовали ProgressWriterдля мониторинга нашей модели, и есть много других способов сделать это. Прежде чем углубляться в способы, давайте сначала посмотрим, как работает мониторинг в CNTK и как мы можем использовать его для обнаружения проблем в нашей модели NN.
Обратные вызовы в CNTK
Фактически, во время обучения и проверки CNTK позволяет нам указывать обратные вызовы в нескольких местах API. Во-первых, давайте внимательнее посмотрим, когда CNTK вызывает обратные вызовы.
Когда CNTK вызывает обратные вызовы?
CNTK будет вызывать обратные вызовы в моменты набора обучения и тестирования, когда:
Мини-партия завершена.
Полный просмотр набора данных завершается во время обучения.
Минипартия тестирования завершена.
Полный анализ набора данных завершается во время тестирования.
Указание обратных вызовов
Работая с CNTK, мы можем указать обратные вызовы в нескольких местах API. Например-
Когда вызвать поезд по функции потерь?
Здесь, когда мы вызываем train для функции потерь, мы можем указать набор обратных вызовов через аргумент обратных вызовов следующим образом:
training_summary=loss.train((x_train,y_train),
parameter_learners=[learner],
callbacks=[progress_writer]),
minibatch_size=16, max_epochs=15)
При работе с мини-пакетными источниками или с использованием ручного мини-пакетного цикла
В этом случае мы можем указать обратные вызовы для целей мониторинга при создании Trainer следующим образом -
from cntk.logging import ProgressPrinter
callbacks = [
ProgressPrinter(0)
]
Trainer = Trainer(z, (loss, metric), learner, [callbacks])
Различные инструменты мониторинга
Давайте изучим различные инструменты мониторинга.
ProgressPrinter
Читая это руководство, вы найдете ProgressPrinterкак наиболее часто используемый инструмент мониторинга. Некоторые характеристикиProgressPrinter инструмент мониторинга:
ProgressPrinterclass реализует базовое ведение журнала на основе консоли для мониторинга нашей модели. Он может записываться на диск, который мы хотим.
Особенно полезно при работе в сценарии распределенного обучения.
Это также очень полезно при работе в сценарии, когда мы не можем войти в консоль, чтобы увидеть вывод нашей программы Python.
С помощью следующего кода мы можем создать экземпляр ProgressPrinter-
ProgressPrinter(0, log_to_file=’test.txt’)
Мы получим на выходе то, что видели в предыдущих разделах -
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
Одним из недостатков использования ProgressPrinter является то, что мы не можем получить четкое представление о том, насколько сложны потери и прогресс показателей с течением времени. TensorBoardProgressWriter - отличная альтернатива классу ProgressPrinter в CNTK.
Перед его использованием нам нужно сначала установить его с помощью следующей команды -
pip install tensorboard
Теперь, чтобы использовать TensorBoard, нам нужно настроить TensorBoardProgressWriter в нашем обучающем коде:
import time
from cntk.logging import TensorBoardProgressWriter
tensorbrd_writer = TensorBoardProgressWriter(log_dir=’logs/{}’.format(time.time()),freq=1,model=z)
Рекомендуется вызывать метод close для TensorBoardProgressWriter Пример после того, как сделано с обучением NNмодель.
Мы можем визуализировать TensorBoard регистрация данных с помощью следующей команды -
Tensorboard –logdir logs