20.12. Construyendo redes neuronales con Keras y TensorFlow
Las redes neuronales son un pilar fundamental en el campo del aprendizaje automático y el aprendizaje profundo. Se inspiran en el funcionamiento del cerebro humano y tienen la capacidad de aprender patrones complejos a partir de grandes volúmenes de datos. Keras, una API de alto nivel, y TensorFlow, una biblioteca de código abierto, son dos herramientas poderosas que facilitan la construcción e implementación de redes neuronales para tareas de clasificación y regresión. En este capítulo, exploraremos cómo utilizar estas herramientas para construir redes neuronales eficientes.
Introducción a Keras y TensorFlow
TensorFlow, desarrollado por Google Brain Team, es una biblioteca de código abierto para computación numérica y aprendizaje automático. Keras, por otro lado, es una API de alto nivel que puede ejecutarse sobre TensorFlow, lo que permite la creación rápida de prototipos y una experimentación más sencilla con redes neuronales. Keras fue diseñado para ser intuitivo y flexible, facilitando el trabajo de desarrolladores e investigadores.
Redes neuronales para clasificación
Las tareas de clasificación implican predecir categorías discretas a partir de datos de entrada. Por ejemplo, identificar si un correo electrónico es spam o no es una tarea de clasificación. Para construir una red neuronal para clasificación usando Keras y TensorFlow, debes seguir los siguientes pasos básicos:
- Importar bibliotecas necesarias: comenzaría importando TensorFlow y Keras, así como otras bibliotecas que podrían resultar útiles.
- Prepare los datos: antes de introducir datos en una red neuronal, se deben formatear y normalizar correctamente. Esto puede implicar codificar categorías (codificación one-hot), normalizar características numéricas y dividir los datos en conjuntos de entrenamiento y prueba.
- Construya el modelo: Con Keras, puede construir una red neuronal secuencialmente agregando capas una tras otra. Para la clasificación, generalmente terminaría la red con una capa softmax, que es adecuada para la clasificación de múltiples clases.
- Compile el modelo: Después de construir el modelo, debe compilarlo definiendo la función de pérdida (como la entropía cruzada categórica para la clasificación de clases múltiples), el optimizador (como Adam o SGD). y métricas de rendimiento (como la precisión).
- Entrenar el modelo: el modelo se entrena utilizando los datos de entrenamiento, y la validación se realiza utilizando un conjunto de datos de validación independiente. Durante el entrenamiento, los pesos de la red se ajustan para minimizar la función de pérdida.
- Evaluar el modelo: después del entrenamiento, el modelo se evalúa utilizando el conjunto de datos de prueba para comprobar su rendimiento general.
Redes neuronales para la regresión
A diferencia de la clasificación, las tareas de regresión implican predecir valores continuos. Un ejemplo clásico es predecir el precio de una casa en función de sus características. La creación de una red neuronal para la regresión es similar a la de la clasificación, pero con algunas diferencias clave:
- La capa de salida normalmente tiene solo una neurona ya que estamos prediciendo un único valor continuo.
- La función de activación en la capa de salida suele ser la función lineal, ya que no estamos limitados a valores entre 0 y 1.
- La función de pérdida utilizada es diferente; La pérdida cuadrática media (MSE) es una opción común para los problemas de regresión.
Implementación práctica
Consideremos un ejemplo práctico de cómo implementar una red neuronal simple para clasificación con Keras y TensorFlow. Supongamos que tenemos un conjunto de datos de imágenes de dígitos escritos a mano y queremos clasificar cada imagen en un dígito del 0 al 9.
importar tensorflow como tf
de tensorflow.keras.models importar secuencial
de tensorflow.keras.layers importar Denso, Aplanar, Softmax
# Cargar el conjunto de datos
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_tren, x_prueba = x_tren/255.0, x_prueba/255.0
# Construir el modelo secuencial
modelo = Secuencial([
Aplanar(input_shape=(28, 28)),
Denso(128, activación='relu'),
Denso(10)
])
# Agregar capa Softmax
modelo.add(Softmax())
# compilar el modelo
model.compile(optimizador='adam',
pérdida='sparse_categorical_crossentropy',
métricas = ['precisión'])
# Entrena el modelo
model.fit(x_train, y_train, épocas=5)
# Evaluar el modelo
modelo.evaluar (prueba_x, prueba_y)
En este ejemplo, primero cargamos el conjunto de datos MNIST y normalizamos las imágenes. Luego construimos un modelo secuencial con una capa Aplanar para transformar la matriz 2D de cada imagen en un vector 1D.seguida de una capa densa (Dense) con activación ReLU y otra capa densa que producirá los logits para cada una de las 10 clases. Se agrega la capa Softmax para convertir los logits en probabilidades. Finalmente, compilamos el modelo con el optimizador Adam, pérdida de entropía cruzada categórica dispersa y métrica de precisión, entrenamos el modelo con los datos de entrenamiento y evaluamos su precisión con los datos de prueba.
Consideraciones finales
La creación de redes neuronales con Keras y TensorFlow es un proceso iterativo y experimental. A menudo es necesario ajustar la arquitectura de la red, las funciones de activación, las funciones de pérdida, los optimizadores y los hiperparámetros para lograr el mejor rendimiento. Además, es importante utilizar técnicas como la validación cruzada y el ajuste para garantizar que el modelo sea sólido y se generalice bien a datos no vistos.
Con la práctica, se sentirá más cómodo creando y optimizando redes neuronales para diferentes tipos de tareas de aprendizaje automático. Keras y TensorFlow te proporcionan las herramientas que necesitas para que puedas centrarte en lo más importante: resolver problemas complejos con aprendizaje automático.