CNTK - Supervisión del modelo

En este capítulo, entenderemos cómo monitorear un modelo en CNTK.

Introducción

En secciones anteriores, hemos realizado algunas validaciones en nuestros modelos NN. Pero, ¿es también necesario y posible monitorizar nuestro modelo durante el entrenamiento?

Si, ya lo hemos usado ProgressWriterclass para monitorear nuestro modelo y hay muchas más formas de hacerlo. Antes de profundizar en las formas, primero echemos un vistazo a cómo funciona el monitoreo en CNTK y cómo podemos usarlo para detectar problemas en nuestro modelo NN.

Devoluciones de llamada en CNTK

En realidad, durante el entrenamiento y la validación, CNTK nos permite especificar devoluciones de llamada en varios puntos de la API. Primero, echemos un vistazo más de cerca a cuándo CNTK invoca devoluciones de llamada.

¿Cuándo CNTK invoca devoluciones de llamada?

CNTK invocará las devoluciones de llamada en los momentos de entrenamiento y prueba establecidos cuando--

  • Se completa un minibatch.

  • Se completa un barrido completo del conjunto de datos durante el entrenamiento.

  • Se completa un minibote de pruebas.

  • Se completa un barrido completo sobre el conjunto de datos durante la prueba.

Especificar devoluciones de llamada

Mientras trabajamos con CNTK, podemos especificar devoluciones de llamada en varios puntos de la API. Por ejemplo

¿Cuándo llamar al tren en una función de pérdida?

Aquí, cuando llamamos a train en una función de pérdida, podemos especificar un conjunto de devoluciones de llamada a través del argumento de devoluciones de llamada de la siguiente manera:

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

Cuando se trabaja con fuentes de minibatch o se utiliza un bucle de minibatch manual

En este caso, podemos especificar devoluciones de llamada para propósitos de monitoreo mientras creamos el Trainer como sigue

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

Varias herramientas de monitoreo

Estudiemos sobre diferentes herramientas de seguimiento.

ProgressPrinter

Mientras lee este tutorial, encontrará ProgressPrintercomo la herramienta de seguimiento más utilizada. Algunas de las caracteristicas deProgressPrinter herramienta de monitoreo son−

ProgressPrinterclass implementa un registro básico basado en consola para monitorear nuestro modelo. Puede registrarse en el disco que queramos.

Especialmente útil cuando se trabaja en un escenario de formación distribuida.

También es muy útil cuando se trabaja en un escenario en el que no podemos iniciar sesión en la consola para ver el resultado de nuestro programa Python.

Con la ayuda del siguiente código, podemos crear una instancia de ProgressPrinter-

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

Obtendremos el resultado de algo que hemos visto en las secciones 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

Una de las desventajas de usar ProgressPrinter es que no podemos tener una buena visión de cómo es difícil la pérdida y el progreso de la métrica a lo largo del tiempo. TensorBoardProgressWriter es una excelente alternativa a la clase ProgressPrinter en CNTK.

Antes de usarlo, primero debemos instalarlo con la ayuda del siguiente comando:

pip install tensorboard

Ahora, para usar TensorBoard, necesitamos configurar TensorBoardProgressWriter en nuestro código de entrenamiento de la siguiente manera:

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

Es una buena práctica llamar al método close en TensorBoardProgressWriter instancia después de hecho con el entrenamiento de NNmodelo.

Podemos visualizar el TensorBoard registro de datos con la ayuda del siguiente comando:

Tensorboard –logdir logs