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