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