20.11. Construcción de redes neuronales con Keras y TensorFlow: ajuste y transferencia de aprendizaje

A medida que nos aventuramos en el campo del aprendizaje automático y especialmente el aprendizaje profundo, nos enfrentamos a desafíos que van más allá del simple entrenamiento de modelos desde cero. Dos técnicas poderosas que surgen como soluciones a estos desafíos son el ajuste y la transferencia de aprendizaje. Utilizando marcos como Keras y TensorFlow, estas técnicas se pueden implementar de manera efectiva, acelerando el proceso de desarrollo y mejorando el rendimiento de los modelos en tareas específicas.

¿Qué es la transferencia de aprendizaje?

El aprendizaje por transferencia es una técnica en la que un modelo desarrollado para una tarea se reutiliza como punto de partida para un modelo en una segunda tarea. Es especialmente útil en aprendizaje profundo, donde las redes neuronales entrenadas en grandes conjuntos de datos se pueden adaptar para resolver problemas relacionados con menos datos disponibles.

¿Qué es el ajuste fino?

El ajuste es un proceso de ajuste en el que ajustamos los pesos de una red neuronal previamente entrenada para una nueva tarea. En lugar de comenzar a entrenar con pesos aleatorios, comenzamos con pesos de un modelo que ya ha sido entrenado en un conjunto de datos grande y generalmente relacionado.

¿Por qué utilizar estas técnicas?

Estas técnicas son particularmente ventajosas cuando tenemos un conjunto de datos limitado para entrenar nuestro modelo. Las redes neuronales, especialmente las profundas, requieren grandes cantidades de datos para aprender características generalizables. Al utilizar un modelo previamente entrenado, podemos aprovechar las características aprendidas de un conjunto de datos más grande y aplicarlas a nuestro problema específico, ahorrando tiempo y recursos computacionales.

Transferir aprendizaje con Keras y TensorFlow

Keras y TensorFlow facilitan la implementación del aprendizaje por transferencia. Podemos cargar fácilmente modelos pre-entrenados disponibles en Keras, como VGG16, ResNet50, InceptionV3, entre otros. Estos modelos se entrenaron en ImageNet, un vasto conjunto de datos con millones de imágenes y miles de clases.


desde keras.applications importe VGG16

# Cargue el modelo VGG16 con pesos previamente entrenados en ImageNet
# include_top=False significa que no incluiremos las capas densas finales
base_model = VGG16(pesos='imagenet', include_top=False)

Con el modelo base cargado, podemos agregar nuevas capas encima para adaptarlo a nuestra tarea específica.


de keras.models importar modelo
de keras.layers importa Dense, GlobalAveragePooling2D

# Agregar nuevas capas encima del modelo base
x = modelo_base.salida
x = GlobalAveragePooling2D() (x)
x = Denso(1024, activación='relu')(x)
predicciones = Denso(num_classes, activación='softmax')(x)

# Definir el modelo final
modelo = Modelo(entradas=modelo_base.entrada, salidas=predicciones)

Ajustes con Keras y TensorFlow

Para realizar ajustes finos, congelamos las capas iniciales del modelo base y entrenamos solo las capas superiores que acabamos de agregar. Después de algunas épocas, podemos comenzar a descongelar algunas de las últimas capas del modelo base y continuar entrenando para realizar ajustes.


# Congela todas las capas del modelo base.
para capa en base_model.layers:
    capa.entrenable = Falso

# compilar el modelo
model.compile(optimizador='rmsprop', pérdida='categorical_crossentropy')

# Primero entrene solo las capas superiores que se han agregado
modelo.fit(...)

# Después del entrenamiento inicial, comienza el ajuste fino de algunas capas del modelo base.
para capa en base_model.layers[:100]:
    capa.entrenable = Verdadero

# Recompilar el modelo para que los cambios surtan efecto
model.compile(optimizador=SGD(lr=0.0001, impulso=0.9), pérdida='categorical_crossentropy')

# Continuar entrenando
modelo.fit(...)

Es importante volver a compilar el modelo después de cambiar el atributo entrenable, ya que esto afecta el proceso de entrenamiento.

Consideraciones finales

El ajuste y el aprendizaje por transferencia son técnicas poderosas que pueden marcar una gran diferencia en el rendimiento de los modelos de aprendizaje profundo, especialmente cuando se trata de conjuntos de datos más pequeños. Con Keras y TensorFlow, estas técnicas se pueden aplicar de forma relativamente sencilla, lo que permite a los investigadores y desarrolladores aprovechar modelos previamente entrenados y adaptarlos a sus necesidades específicas.

Es importante recordar que el éxito de estas técnicas depende de qué tan relacionadas estén las tareas originales y finales. Además, la elección de qué capas congelar o descongelar durante el ajuste debe hacerse con cuidado, considerando la arquitectura específica del modelo y la naturaleza del problema en cuestión.

En resumen, Keras y TensorFlow ofrecen las herramientasnecesario implementar el aprendizaje por transferencia y el ajuste de manera eficiente, lo que puede acelerar significativamente el desarrollo de modelos de aprendizaje profundo y mejorar sus resultados.

Ahora responde el ejercicio sobre el contenido:

¿Cuál de las siguientes afirmaciones describe correctamente el concepto de "ajuste" en Deep Learning, como se explica en el texto?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

Imagen del artículo Construcción de redes neuronales con Keras y TensorFlow: implementación de redes neuronales para tareas de clasificación y regresión

Siguiente página del libro electrónico gratuito:

79Construcción de redes neuronales con Keras y TensorFlow: implementación de redes neuronales para tareas de clasificación y regresión

5 minutos

¡Obtén tu certificado para este curso gratis! descargando la aplicación Cursa y leyendo el libro electrónico allí. ¡Disponible en Google Play o App Store!

Disponible en Google Play Disponible en App Store

+ 6,5 millones
estudiantes

Certificado gratuito y
válido con código QR

48 mil ejercicios
gratis

Calificación de 4.8/5
en tiendas de aplicaciones

Cursos gratuitos de
vídeo, audio y texto.