Path: blob/master/site/es-419/guide/keras/custom_callback.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Cómo escribir sus propias retrollamadas
Introducción
Una retrollamada es una poderosa herramienta que permite personalizar el comportamiento de un modelo Keras durante el entrenamiento, la evaluación o la inferencia. Los ejemplos incluyen tf.keras.callbacks.TensorBoard
para visualizar el progreso del entrenamiento y los resultados con TensorBoard, o tf.keras.callbacks.ModelCheckpoint
para guardar periódicamente su modelo durante el entrenamiento.
En esta guía, aprenderá qué es una retrollamada de Keras, qué puede hacer y cómo puede crear la suya propia. Le ofrecemos algunas demostraciones de aplicaciones de retrollamadas sencillas para que pueda familiarizarse con ellas.
Preparación
Resumen de retrollamadas de Keras
Todas las retrollamadas subclasifican la clase keras.callbacks.Callback
, y anulan un conjunto de métodos llamados en varias etapas del entrenamiento, la prueba y la predicción. Las retrollamadas son útiles para obtener una visión de los estados internos y las estadísticas del modelo durante el entrenamiento.
Puede transferir una lista de retrollamadas (como argumento de palabra clave callbacks
) a los siguientes métodos del modelo:
keras.Model.fit()
keras.Model.evaluate()
keras.Model.predict()
Un resumen de los métodos de retrollamadas
Métodos globales
on_(train|test|predict)_begin(self, logs=None)
Se llama al principio de fit
/evaluate
/predict
.
on_(train|test|predict)_end(self, logs=None)
Se llama al final de fit
/evaluate
/predict
.
Métodos de entrenamiento, prueba y predicción por lotes
on_(train|test|predict)_batch_begin(self, batch, logs=None)
Se llama justo antes de procesar un lote durante el entrenamiento/prueba/predicción.
on_(train|test|predict)_batch_end(self, batch, logs=None)
Se llama al final del entrenamiento/prueba/predicción de un lote. Dentro de este método, logs
es un dict que contiene los resultados de las métricas.
Métodos a nivel de época (solo para entrenamiento)
on_epoch_begin(self, epoch, logs=None)
Se llama al principio de una época durante el entrenamiento.
on_epoch_end(self, epoch, logs=None)
Se llama al final de una época durante el entrenamiento.
Un ejemplo básico
Veamos un ejemplo concreto. Para comenzar, vamos a importar tensorflow y definir un modelo Keras secuencial simple:
A continuación, suba los datos MNIST para el entrenamiento y las pruebas desde la API de los conjuntos de datos de Keras:
Ahora, defina una simple retrollamada personalizada que registre:
Cuándo
fit
/evaluate
/predict
comienza y terminaCuándo comienza y termina cada época
Cuándo comienza y termina cada lote de entrenamiento
Cuándo comienza y termina cada lote de evaluación (prueba)
Cuándo comienza y termina cada lote de inferencia (predicción)
Vamos a probarlo:
Uso del dict logs
El dict logs
contiene el valor de la pérdida, y todas las métricas al final de un lote o época. El ejemplo incluye la pérdida y el error promedio absoluto.
Uso del atributo self.model
Además de recibir información de registro cuando se llama a uno de sus métodos, las retrollamadas tienen acceso al modelo asociado con la ronda actual de entrenamiento/evaluación/inferencia: self.model
.
Estas son algunas de las cosas que puede hacer con self.model
en una retrollamada:
Establece
self.model.stop_training = True
para interrumpir inmediatamente el entrenamiento.Mute los hiperparámetros del optimizador (disponible como
self.model.optimizer
), comoself.model.optimizer.learning_rate
.Guarde el modelo en intervalos periódicos.
Registre la salida de
model.predict()
sobre algunas muestras de la prueba al final de cada época, para utilizarla como una verificación de sensatez durante el entrenamiento.Extraer visualizaciones de características intermedias al final de cada época, para controlar lo que el modelo está aprendiendo con el tiempo.
etc.
Vamos a ver esto en acción en un par de ejemplos.
Ejemplos de aplicaciones de retrollamadas de Keras
Parada anticipada con pérdidas mínimas
Este primer ejemplo muestra cómo se crea una Callback
que detiene el entrenamiento cuando se alcanza el mínimo de pérdida, mediante el atributo self.model.stop_training
(booleano). De forma opcional, se puede proporcionar un argumento patience
para especificar cuántas épocas debemos esperar antes de detenernos después de haber alcanzado un mínimo local.
tf.keras.callbacks.EarlyStopping
proporciona una implementación más completa y general.
Programación de la tasa de aprendizaje
En este ejemplo, se muestra cómo se puede utilizar una retrollamada personalizada para cambiar dinámicamente la tasa de aprendizaje del optimizador durante el transcurso del entrenamiento.
Consulte callbacks.LearningRateScheduler
para obtener una implementación más general.
Retrollamadas de Keras integradas
Asegúrese de revisar las retrollamadas actuales de Keras leyendo la API docs. Las aplicaciones incluyen el registro en CSV, guardar el modelo, visualizar métricas en TensorBoard, ¡y mucho más!