20.10 Construyendo redes neuronales con Keras y TensorFlow: usando devoluciones de llamada y guardando modelos
El desarrollo de redes neuronales a través de bibliotecas como Keras y TensorFlow ha simplificado significativamente el proceso de creación y entrenamiento de modelos de aprendizaje profundo. Keras, una API de alto nivel que se ejecuta sobre TensorFlow, permite a los usuarios crear redes neuronales de una manera intuitiva y accesible. Una parte clave de este proceso es el uso de devoluciones de llamada y modelos de guardado, que son esenciales para gestionar de manera eficiente la capacitación y preservar los modelos entrenados.
Comprensión de las devoluciones de llamada en Keras
Las devoluciones de llamada son funciones que se pueden aplicar en diferentes etapas del entrenamiento de una red neuronal, como al principio y al final de cada época, antes o después de que se procese un lote, o incluso después de finalizar el entrenamiento. Estas funciones son herramientas poderosas para monitorear el rendimiento del modelo, realizar ajustes dinámicos, guardar el progreso, cambiar las tasas de aprendizaje, detener el entrenamiento prematuramente y más.
Usar devoluciones de llamada en Keras es bastante simple. Se pasan como argumentos en la función fit()
de la plantilla. Keras viene con varias devoluciones de llamada predefinidas, pero también puedes crear tus propias devoluciones de llamada personalizadas.
Devoluciones de llamada más comunes
- ModelCheckpoint: Esta devolución de llamada guarda el modelo después de cada época. Puede configurarlo para guardar solo el mejor modelo según una métrica de rendimiento específica, como precisión o pérdida de validación.
- EarlyStopping: le permite detener el entrenamiento tan pronto como una métrica monitoreada deja de mejorar, evitando así el sobreajuste y ahorrando tiempo y recursos computacionales.
- ReduceLROnPlateau: reduce la tasa de aprendizaje cuando una métrica de rendimiento deja de mejorar, lo que permite realizar ajustes más precisos en los pesos de la red neuronal.
- TensorBoard: Integración con TensorBoard, una herramienta de visualización para TensorFlow, que le permite monitorear métricas, visualizar gráficos de cálculo, distribuciones de activación y más.
Guardar y cargar plantillas
Además de las devoluciones de llamada, es fundamental saber cómo guardar y cargar modelos correctamente. Keras ofrece varias formas de guardar un modelo, incluida la arquitectura, los pesos e incluso el estado del optimizador. Esto es extremadamente útil para reanudar el entrenamiento más tarde o para realizar inferencias en un entorno de producción.
La función save()
se puede utilizar para guardar un modelo completo en un solo archivo, que puede ser un archivo HDF5 o un directorio de TensorFlow SavedModel. Para cargar un modelo guardado, simplemente use la función load_model()
. Además, puede guardar solo la arquitectura del modelo en formato JSON o YAML y los pesos en un archivo HDF5 por separado.
Ejemplo práctico de devoluciones de llamada y rescate
Veamos cómo utilizar algunos de estos recursos en la práctica. Supongamos que estamos entrenando una red neuronal para clasificar imágenes en un conjunto de datos:
desde keras.models importar secuencial de keras.layers importar Denso de keras.callbacks importar ModelCheckpoint, EarlyStopping de keras.datasets importar cifar10 # Cargando y preparando datos (x_train, y_train), (x_test, y_test) = cifar10.load_data() x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 # Construyendo el modelo modelo = Secuencial([ Denso(512, activación='relu', input_shape=(32 * 32 * 3,)), Denso(256, activación='relu'), Denso(10, activación='softmax') ]) model.compile(optimizador='adam', pérdida='sparse_categorical_crossentropy', métricas = ['precisión']) # Configurar devoluciones de llamada punto de control = ModelCheckpoint('best_model.h5', save_best_only=True, monitor='val_loss', modo='min') early_stopping = EarlyStopping(monitor='val_loss', paciencia=5) # Entrenando el modelo historia = modelo.fit(x_train, y_train, épocas = 100, tamaño_lote = 64, datos_validación=(prueba_x, prueba_y), devoluciones de llamada=[punto de control, parada_temprana])
En este ejemplo, la devolución de llamada ModelCheckpoint
está configurada para guardar el mejor modelo en función de la pérdida de validación. EarlyStopping
detendrá el entrenamiento si la pérdida de validación no mejora después de cinco épocas consecutivas. Después del entrenamiento, podemos cargar el mejor modelo guardado usando load_model('best_model.h5')
.
Consideraciones finales
El uso de devoluciones de llamada y modelos de guardado en Keras son prácticas que pueden mejorar significativamente la eficiencia y eficacia del proceso de entrenamiento de redes neuronales. Con la capacidad de monitorear el desempeño, hagaAl realizar ajustes automáticos y preservar el estado del modelo, los desarrolladores pueden centrarse en otras áreas importantes, como la preparación de datos y la arquitectura de red. Keras y TensorFlow ofrecen una gama de herramientas que, cuando se usan bien, pueden generar resultados impresionantes en proyectos de aprendizaje automático y aprendizaje profundo.