CNTK - Monitorando o Modelo

Neste capítulo, vamos entender como monitorar um modelo no CNTK.

Introdução

Nas seções anteriores, fizemos algumas validações em nossos modelos NN. Mas também é necessário e possível monitorar nosso modelo durante o treinamento?

Sim, ja usamos ProgressWriterpara monitorar nosso modelo e há muitas outras maneiras de fazer isso. Antes de nos aprofundarmos nos métodos, primeiro vamos dar uma olhada em como funciona o monitoramento em CNTK e como podemos usá-lo para detectar problemas em nosso modelo NN.

Chamadas de retorno em CNTK

Na verdade, durante o treinamento e a validação, o CNTK nos permite especificar callbacks em vários pontos da API. Primeiro, vamos examinar mais de perto quando o CNTK invoca retornos de chamada.

Quando o CNTK invoca retornos de chamada?

O CNTK irá invocar os callbacks nos momentos de treinamento e teste quando -

  • Um minibatch é concluído.

  • Uma varredura completa sobre o conjunto de dados é concluída durante o treinamento.

  • Um minibatch de teste é concluído.

  • Uma varredura completa no conjunto de dados é concluída durante o teste.

Especificando retornos de chamada

Enquanto trabalhamos com CNTK, podemos especificar retornos de chamada em vários pontos da API. Por exemplo -

Quando chamar o trem em uma função de perda?

Aqui, quando chamamos train em uma função de perda, podemos especificar um conjunto de callbacks por meio do argumento callbacks como segue−

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

Ao trabalhar com fontes de minibatch ou usar um loop de minibatch manual

Neste caso, podemos especificar retornos de chamada para fins de monitoramento ao criar o Trainer como segue -

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

Várias ferramentas de monitoramento

Vamos estudar sobre diferentes ferramentas de monitoramento.

ProgressPrinter

Ao ler este tutorial, você encontrará ProgressPrintercomo a ferramenta de monitoramento mais utilizada. Algumas das características deProgressPrinter ferramenta de monitoramento são-

ProgressPrinterclasse implementa log básico baseado em console para monitorar nosso modelo. Ele pode registrar no disco que quisermos.

Especialmente útil ao trabalhar em um cenário de treinamento distribuído.

Também é muito útil ao trabalhar em um cenário em que não podemos fazer login no console para ver a saída de nosso programa Python.

Com a ajuda do código a seguir, podemos criar uma instância de ProgressPrinter-

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

Obteremos a saída de algo que vimos nas seções anteriores -

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

Uma das desvantagens de usar o ProgressPrinter é que não podemos ter uma boa visão de como a perda e o progresso da métrica ao longo do tempo são difíceis. TensorBoardProgressWriter é uma ótima alternativa para a classe ProgressPrinter no CNTK.

Antes de usá-lo, precisamos primeiro instalá-lo com a ajuda do seguinte comando -

pip install tensorboard

Agora, para usar o TensorBoard, precisamos configurar TensorBoardProgressWriter em nosso código de treinamento da seguinte maneira−

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

É uma boa prática chamar o método de fechamento em TensorBoardProgressWriter exemplo depois de feito com o treinamento de NNmodelo.

Podemos visualizar o TensorBoard registrando dados com a ajuda do seguinte comando -

Tensorboard –logdir logs